【问题标题】:C++ == operator overloading (impementations)C++ == 运算符重载(实现)
【发布时间】:2013-10-16 07:18:19
【问题描述】:

我在 ULong.h 中声明了这些原型

  bool operator== (const ULong& ) const;
  bool operator== (unsigned long long) const;
  friend bool operator== (unsigned long long, const ULong&);

在 ULong.cpp 中,我正在尝试实现它们:

bool ULong::operator== (const ULong& ul) const
{
    if(_num_digits != ul._num_digits)
        return false;
    for(unsigned i = 0;i < _num_digits; i++)
    {
        if(_number[i] != ul._number[i])
            return false;
    }
    return true;
}

bool ULong::operator== (unsigned long long l) const
{
    return *this == ULong(l);
}

ULong operator== (unsigned long long l, const ULong& ul)
{
    return ULong(l) == ul;
}

我得到编译器错误:

ULong.cpp:358:56:错误:新声明'ULong operator==(long long unsigned int, const ULong&)’ 在 ULong.cpp:10:0 中包含的文件中:

ULong.h:76:15:错误:混淆旧声明'bool operator==(long long unsigned int, const ULong&)'

我不明白如何正确实现这个方法。

【问题讨论】:

    标签: c++ operator-overloading


    【解决方案1】:

    声明说它返回一个bool。定义说它出于某种原因返回ULong。这是你的错误,正如编译器已经告诉你的那样。为什么要在定义中切换返回类型?

    【讨论】:

      【解决方案2】:

      您的声明返回bool,但您的实现返回ULong

      【讨论】:

      • @JacobVoronin,是的,我错过了friend 关键字,你的问题是返回的类型。
      【解决方案3】:

      返回类型是问题所在。在定义中它的 ULong 应该是布尔值。 ;)

      【讨论】:

        猜你喜欢
        • 2012-08-21
        • 2013-11-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-07-21
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多