不能将'ClassName&'类型的非const左值引用绑定到'ClassName'类型的右值

时间:2018-03-11 19:21:03

标签: c++ class oop pointers

这是我的功能原型:

  Rational & operator+=(const Rational &);

这是我班级的一部分:

    class Rational
    {
      public:
      Rational(int a = 0, int b = 1) : n(a), d(b) {}

这是我的功能:

Rational & Rational::operator+=(const Rational & r)
{
  return (r + *this);
}

我已经创建了一个添加两个有理数的函数。 当我尝试编译它时,我收到以下错误:

error: cannot bind non-const lvalue reference of type 
‘Rational&’ to an rvalue of type ‘Rational’
   return (r + *this);

我做错了什么?

1 个答案:

答案 0 :(得分:3)

你的操作符+返回一个新的实例,不是吗?那么,你的退货声明会发生什么?

  1. 您尝试返回临时结果(这是错误消息的内容)。

  2. 同时,你还没有修改过这个对象,因此违反了+ =语义(不,通过替换表达式的结果,这个值应该是你没有给你的实际意图的编译器一点点暗示。)

  3. 你知道,一个更自然的实现方法是将真正的数学运算放在operator + =中,然后在operator +中重用它,比如R retVal = a; return a += b;