这真让我烦恼。我正在用C ++重载比较运算符,我得到一个奇怪的错误,我不确定如何纠正。
我正在使用的代码如下所示:
bool HugeInt::operator==(const HugeInt& h) const{
return h.integer == this->integer;
}
bool HugeInt::operator!=(const HugeInt& h) const{
return !(this == h);
}
其中integer
是short [30]
==
重载工作正常。但是当我尝试在!=
正文中使用它时,它告诉我==
尚未定义。我是C ++的新手,所以欢迎任何提示。
谢谢!
答案 0 :(得分:12)
您正在尝试比较指针和实例。 this
是指向当前对象的指针,您需要先取消引用它。
无论如何,您已经提到integer
是一系列短裤。这可能意味着你不应该将它与==
进行比较 - 你应该手动比较所有元素(当然,你要检查数组中元素的数量是否相同,以防它们可以部分填补)。或者你可以使用Luchian建议的vector
- 它有明确定义的operator==
。
答案 1 :(得分:5)
像这样(缺少星号)。
bool HugeInt::operator!=(const HugeInt& h) const{
return !(*this == h);
}
答案 2 :(得分:4)
this
的类型为HugeInt*
,但您可以将其视为HugeInt&
。
使用return !(*this == h);
代替:)
答案 3 :(得分:2)
bool HugeInt::operator!=(const HugeInt& h) const{
return !(this == h);
}
应该是
bool HugeInt::operator!=(const HugeInt& h) const{
return !(*this == h);
}
此外,如果integer
的类型为short[30]
,则比较将无法达到预期效果。你需要逐个元素地进行比较,如果这是你想要的。
另外,我可以建议使用std::vector<short>
而不是原始数组吗?
答案 4 :(得分:2)
重载运算符处理对象而非指针(如下所示)。您应该在不等式运算符中取消引用它:
return !(*this == h);
您也可以将其结构化为:
return( !operator==( h ) );