![](/img/trans.png)
[英]c++ Compiler can't use my overloaded < operator for bitset key comparison
[英]Use of overloaded comparison operator> in C++ in conjunction with a getter function
我正在努力解決有關二進制比較運算符>重載的問題。 按照設計,應該比較兩張卡片並返回1(如果左側參數較大)或0(相反的情況)。
這是問題的簡要說明:
class Card
包括int suit
和int 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的情況。單鏈接列表通常通過返回空指針來指示列表結束條件。
我猜您正在將鏈表上的最后一個項目與不跟隨它的空項目進行比較。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.