重载比较运算符的使用>C++与 getter 函数结合使用
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
的实例表示单链表中的一个节点。
以以下方式组合这两个函数会导致段错误(具体来说,在gdb术语中" in Card &Node::getCardRef(): this = 0x0"):
if (node.getCardRef() > node.getNext()->getCardRef()){
/* do wondrous stuff */
}
同样,当分离时,Card &Node::getCardRef()
似乎产生了期望的结果。
"在卡和节点:getCardRef (): = 0 x0")
if (node.getCardRef() > node.getNext()->getCardRef()){
Node::getCardRef
在该代码片段中被调用了两次。第一次作为.
运算符的结果,因此我们可以合理地确定*其this
将是有效的。
对Node::getCardRef
的另一个调用是->
运算符的结果。->
的左侧完全有可能是0(因此,this
也将是0)。
很可能node.getNext()
返回0。单链表通常通过返回空指针来指示列表结束条件。
我猜你是在比较链表上的最后一项与不跟随它的空项。
*:我们可以合理确定,但不是100%确定。node可能包含损坏的引用,或者先前的野指针损坏了局部变量。根据我的经验,空指针比空引用更容易出现
相关文章:
- 如何通过 getter 函数删除矢量的元素?
- 返回常量对象引用 (getter) 和仅返回字符串有什么区别?
- 如何为 C 型字符串数组编写 getter 和 setter?
- C++ Setter/Getter,cout 工作,printf 失败
- 指向成员函数的模板指针 - getter
- 使用 getter 访问成员变量C++
- 如何在节点插件中创建 getter?
- 即使有 0 个错误,Getter 似乎也会使程序崩溃
- 将值推送到 getter 函数调用的列表中时出现问题
- 为什么我的编译器在调用 const getter 函数时抛出"转换丢失(const)限定符"错误?
- 私有变量无法正常工作的C++getter方法(只有Java经验)
- 如何使用 getter 功能push_back列表?
- 常量和非常量 getter 具有相同的名称
- 不一定获得成员价值的 getter 方法?
- 在 c++ 中使用 getter 作为unordered_map会创建大小为 8 的无效读取
- Getter 和 Setter 用于类 C++ 中的数组元素
- 无法使用在子类中定义的虚拟getter实现基类
- 如何编写C++getter和setter
- 如何为包含另一个类实例的数组制作常量 getter?
- 为什么叮当格式在 getter 的大括号之前不会中断?