【问题标题】:No match for operator == error, C++运算符不匹配 == 错误,C++
【发布时间】:2012-10-25 20:47:25
【问题描述】:

这真的让我很烦。我正在重载 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++ 新手,欢迎提供任何提示。

谢谢!

【问题讨论】:

标签: c++ operator-overloading


【解决方案1】:

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

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

【讨论】:

  • 谢谢!这让它正常运行。它实际上是一个shorts 的数组;这有什么区别吗?这是针对我正在上的一门课程的一个小项目,似乎我们只是希望将一个短数组与另一个进行比较。更多内容可能超出了课程的范围(目前)。
  • 不,它也不适用于shorts - 它只会检查它是否实际上是同一个数组。为了比较内容,您应该迭代和比较每个元素。
【解决方案2】:

像这样(缺少星号)。

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

【讨论】:

    【解决方案3】:

    this 的类型为 HugeInt*,但您将其当作 HugeInt& 使用。

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

    【讨论】:

      【解决方案4】:
      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> 而不是原始数组?

      【讨论】:

        【解决方案5】:

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

        return !(*this == h);
        

        你也可以像这样构造它:

        return( !operator==( h ) );
        

        【讨论】:

          猜你喜欢
          • 2015-11-19
          • 1970-01-01
          • 1970-01-01
          • 2013-08-28
          • 1970-01-01
          • 1970-01-01
          • 2018-07-19
          • 2017-08-10
          • 2016-03-18
          相关资源
          最近更新 更多