2

这真的让我很烦。我正在重载 C++ 中的比较运算符,但我遇到了一个奇怪的错误,我不确定如何更正。

我正在使用的代码如下所示:

bool HugeInt::operator==(const HugeInt& h) const{
    return h.integer == this->integer;
}

bool HugeInt::operator!=(const HugeInt& h) const{
    return !(this == h);
}

哪里integershort [30]

==重载工作正常。但是当我尝试在!=正文中使用它时,它告诉我==尚未定义。我是 C++ 新手,所以欢迎任何提示。

谢谢!

4

5 回答 5

12

您正在尝试比较指针和实例。this是指向当前对象的指针,您需要先取消引用它。

无论如何,你已经提到这integer是一系列短裤。这可能意味着您不应该将其与==- 您应该手动比较所有元素(当然,在检查数组中的元素数量是否相同之后,以防它们可以部分填充)。或者你可以使用vectorLuchian 建议的 - 它有一个明确定义的operator==.

于 2012-10-25T20:48:55.060 回答
5

像这样(缺少星号)。

bool HugeInt::operator!=(const HugeInt& h) const{
    return !(*this == h);
}
于 2012-10-25T20:49:18.240 回答
4

this有 type HugeInt*,但你使用它就好像它是HugeInt&.

改为使用return !(*this == h);:)

于 2012-10-25T20:49:00.877 回答
2
bool HugeInt::operator!=(const HugeInt& h) const{
    return !(this == h);
}

应该

bool HugeInt::operator!=(const HugeInt& h) const{
    return !(*this == h);
}

此外,如果integer是 type short[30],则比较不会达到您的预期。如果这是您想要的,您需要逐个元素进行比较。

另外,我可以建议使用 astd::vector<short>而不是原始数组吗?

于 2012-10-25T20:49:30.913 回答
2

重载的运算符作用于对象而不是指针(像这样)。您应该在不等式运算符中取消引用它:

return !(*this == h);

您也可以像这样构造它:

return( !operator==( h ) );
于 2012-10-25T20:52:05.897 回答