我正在努力解决有关二元比较运算符 > 重载的问题。按照设计,它应该比较两张卡片并返回 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
是 typeCard *
并指向 type 的有效对象Card
。此外, 的实例class Node
表示单链表中的节点。
以下列方式组合这两个函数会导致段错误(具体而言,用 gdb 术语“In Card &Node::getCardRef(): this = 0x0”):
if (node.getCardRef() > node.getNext()->getCardRef()){
/* do wondrous stuff */
}
此外,当孤立时,Card &Node::getCardRef()
似乎会产生预期的结果。