在重载双目运算符时报错must take either zero or one argument,代码如下:
class Complex
{
public:
Complex(int real=0,int imag=0)
{
r=real; i=imag;
}
Complex operator+(Complex a,Complex b)
{
Complex c;
c.r=a.r+b.r;
c.i=a.i+b.i;
return c;
}
private:
int r,i;
};
后来发现原因是这里的运算符函数被认为是类的成员函数,而成员函数隐含传递本对象地址给this指针,所以只需要一个显示形式参数。
解决方法(1):
删除第一个显式形参
Complex operator+(Complex b)
{
Complex c;
c.r=r+b.r;//这里两行省略了this
c.i=i+b.i;
return c;
}
解决方法(2):
由于作为友元的双目运算符函数,是两个显式形式参数,可以将这个重载运算符的函数定义为友元函数,即在前面加上friend
friend Complex operator+(Complex a,Complex b)
{
Complex c;
c.r=a.r+b.r;
c.i=a.i+b.i;
return c;
}