【问题标题】:identifier "operator + =" is not defined标识符“operator + =”未定义
【发布时间】:2019-04-21 11:11:52
【问题描述】:

我想在委托的帮助下实现运算符“+”。但是当我想使用“+ =”操作符时,却找不到。

Money Money::operator +=(const Money &m)noexcept
{
    rouble += m.rouble;
    penny += m.penny;
    return *this;
}

Money operator + (const Money &first, const Money &second) noexcept
{
    return operator+=(second);
           ^^^^^^^^^
}

【问题讨论】:

  • 请提供complete, verifiable example我们可以查看。
  • return语句需要返回first;它没有。例如return first.operator+=(second)
  • 请注意,这个问题与运算符重载无关。如果您在任何地方将operator += 更改为my_func,您将遇到同样的问题。

标签: c++ operator-overloading


【解决方案1】:

您的第二个函数 (operator+) 是独立的,它不是成员。你的第一个函数 (Money::operator+=) 一个成员函数;您不能只使用 += 成员函数,就好像它是独立的一样。

因此,在您的第二个函数中,您可能想要执行以下操作:

Money operator+ (const Money &first, const Money &second) noexcept
{
    Money sum{first}; 
    sum += second; 
    return sum; 
}

话虽如此-您还应该遵循@πάνταῥεῖ的建议并阅读:

What are the basic rules and idioms for operator overloading?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多