【发布时间】:2012-01-11 16:50:17
【问题描述】:
我正在努力解决有关二元比较运算符 > 重载的问题。按照设计,它应该比较两张卡片并返回 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 的实例代表单链表中的一个节点。
以下列方式组合这两个函数会导致段错误(具体而言,用 gdb 术语“In Card &Node::getCardRef(): this = 0x0”):
if (node.getCardRef() > node.getNext()->getCardRef()){
/* do wondrous stuff */
}
此外,当隔离时,Card &Node::getCardRef() 似乎会产生预期的结果。
【问题讨论】:
-
getNext() 不返回 NULL 吗?
-
c指向的对象驻留在堆栈还是freestore?如果它驻留在堆栈上,那么您将返回对导致未定义行为的局部变量的引用。 -
通常,定义
operator>返回bool -
你确定 getNext() 返回一个有效的指针/对象/引用
-
@elmov:你确定吗?错误消息
this = 0x0看起来像是指向我的 NULL 指针。
标签: c++ operator-overloading comparison-operators return-by-reference