!(this == h) 中的运算符 == 错误不匹配

问题描述 投票:0回答:5

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

c++ operator-overloading
5个回答
12
投票

您正在尝试比较指针和实例。

this
是指向当前对象的指针,需要先取消引用它。

无论如何,你提到

integer
是一系列短裤。这可能意味着您不应该将其与
==
进行比较 - 您应该只手动比较所有元素(当然,之后您检查数组中的元素数量是否相同,以防它们可以部分填充) 。或者您可以按照 Luchian 建议使用
vector
- 它有一个明确定义的
operator==


5
投票

像这样(缺少星号)。

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

4
投票

this
具有类型
HugeInt*
,但您使用它就像它是
HugeInt&

使用

return !(*this == h);
代替:)


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>
而不是原始数组吗?


2
投票

重载运算符适用于对象而不是指针(如下所示)。您应该在不等式运算符中取消引用它:

return !(*this == h);

您也可以将其结构如下:

return( !operator==( h ) );
© www.soinside.com 2019 - 2024. All rights reserved.