这是我的功能原型:
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);
我做错了什么?
答案 0 :(得分:3)
你的操作符+返回一个新的实例,不是吗?那么,你的退货声明会发生什么?
您尝试返回临时结果(这是错误消息的内容)。
同时,你还没有修改过这个对象,因此违反了+ =语义(不,通过替换表达式的结果,这个值应该是你没有给你的实际意图的编译器一点点暗示。)
你知道,一个更自然的实现方法是将真正的数学运算放在operator + =中,然后在operator +中重用它,比如R retVal = a; return a += b;
。