这真让我烦恼。我正在努力重载 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++ 新手,所以欢迎任何提示。
您正在尝试比较指针和实例。
this
是指向当前对象的指针,需要先取消引用它。
无论如何,你提到
integer
是一系列短裤。这可能意味着您不应该将其与 ==
进行比较 - 您应该只手动比较所有元素(当然,之后您检查数组中的元素数量是否相同,以防它们可以部分填充) 。或者您可以按照 Luchian 建议使用 vector
- 它有一个明确定义的 operator==
。
像这样(缺少星号)。
bool HugeInt::operator!=(const HugeInt& h) const{
return !(*this == h);
}
this
具有类型 HugeInt*
,但您使用它就像它是 HugeInt&
。
使用
return !(*this == h);
代替:)
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>
而不是原始数组吗?
重载运算符适用于对象而不是指针(如下所示)。您应该在不等式运算符中取消引用它:
return !(*this == h);
您也可以将其结构如下:
return( !operator==( h ) );