我正在努力解决有关二元比较运算符 > 重载的问题。按照设计,它应该比较两张卡片并返回 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()似乎会产生预期的结果。