不匹配operator == error,C ++

时间:2012-10-25 20:47:26

标签: c++ operator-overloading

这真让我烦恼。我正在用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 ++的新手,所以欢迎任何提示。

谢谢!

5 个答案:

答案 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 ) );