在写类对象(我用结构体了)时会用到运算符重载,这时候出现了问题,编译时始终报错:item::operator+(const item&, const item&)' must take either zero or one argument;
代码在此:
struct item{ int a,b; item(int _a=0,int _b=0):a(_a),b(_b){}; item operator - (const item& c); item operator + (const item& _a,const item& _b); }; item item::operator - (const item& c){ return item(a-c.a,b-c.b);//返回临时对象 } item item::operator + (const item& _a,const item& _b){ return item(_a.a+_b.a,_a.b+_b.b);//返回临时对象 }
出现了运算符重载为成员函数时参数个数过多的情况。
可以将双参数成员函数(加法)改为全局变量或改为单参数全局变量(形如减法)。
因为在调用时,"a-b"会被编译器理解成
a.operator - (b)
所以运算符重载为成员函数时参数个数应为运算符目数减一;重载为全局函数时等于运算符的目数。
修改代码为:
struct item{ int a,b; item(int _a=0,int _b=0):a(_a),b(_b){}; item operator - (const item& ); }; item item::operator - (const item& c){ return item(a-c.a,b-c.b); } item operator + (const item& A,const item& B){ return item(A.a+B.a,A.b+B.b); }