簡體   English   中英

在C ++中結合使用重載比較運算符>和getter函數

[英]Use of overloaded comparison operator> in C++ in conjunction with a getter function

我正在努力解決有關二進制比較運算符>重載的問題。 按照設計,應該比較兩張卡片並返回1(如果左側參數較大)或0(相反的情況)。

這是問題的簡要說明:

class Card包括int suitint value作為私有數據成員等變量。 我聲明了重載的運算符,如下所示:

int operator>(const Card& lhs, const Card& rhs);

因為它需要訪問class Card私有數據成員,所以它在類聲明中用friend限定符聲明。

確認該功能本身可以按所述方式工作。 真正的問題在於通過調用以下形式的“ getter”函數來提供兩個參數:

 Card &Node::getCardRef() const{
       Card& ref = *c;
       return ref;
 }

其中變量c是類型的Card *和點類型的有效對象Card 同樣, class Node的實例表示單鏈列表中的節點。

以以下方式組合這兩個函數會導致segfault(具體來說,以gdb術語“在Card&Node :: getCardRef():this = 0x0”):

 if (node.getCardRef() > node.getNext()->getCardRef()){   

 /* do wondrous stuff */

  }

另外,當隔離時, Card &Node::getCardRef()似乎會產生所需的結果。

“在卡&Node :: getCardRef()中:此= 0x0”)

if (node.getCardRef() > node.getNext()->getCardRef()){   

在該代碼段中, Node::getCardRef被調用了兩次。 由於第一次. 運算符,因此我們可以合理地確定* this將是有效的。

Node::getCardRef的另一個調用是->運算符的結果。 這是完全可能的是的左手側的->為0(因此, this將是0,也可以)。

node.getNext()很可能返回0的情況。單鏈接列表通常通過返回空指針來指示列表結束條件。

我猜您正在將鏈表上的最后一個項目與不跟隨它的空項目進行比較。


*:我們可以合理確定,但不能100%確定。 節點可能包含損壞的引用,或者先前的通配指針已損壞我們的局部變量。 以我的經驗,空指針比空引用更有可能。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM