考虑以下运算符重载方案
class integer
{
public:
int a;
integer()
{
a = 0;
}
friend integer operator+(integer &a ,int b);
};
integer operator+(integer &a,int b)
{
a.a = a.a + b;
return a;
}
int main()
{
integer obj;
integer obj2;
obj+2; //Line 1. this works.
operator+
函数返回integer
类型的对象。为什么我不能执行函数调用,如
(obj+2)+3; //no match for 'operator+' (operand types are 'integer' and 'int')
虽然这有效
obj2 = obj+2;
obj2+3;
答案 0 :(得分:3)
integer &a
表示a
只能引用左值。但obj+2
不是左值。
要解决此问题,您应将参数更改为integer a
,其中:
operator+
的功能。如果您的第一个参数是integer&
,则建议您尝试编写operator+=
。对于该函数,解决方案是返回integer&
,以便obj+=2
是左值。
答案 1 :(得分:2)
作为M.M的答案(你应该接受)的必然结果,这里是固定代码:
class integer
{
public:
int a;
integer()
{
a = 0;
}
friend integer operator+(integer a ,int b);
};
// fix: arg 1 passed by value
integer operator+(integer a,int b)
{
a.a = a.a + b;
return a;
}
int main()
{
integer obj;
integer obj2;
obj+2;
(obj+2)+3;
}