运算符重载must take either zero or one argument错误

在写类对象(我用结构体了)时会用到运算符重载,这时候出现了问题,编译时始终报错: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);
}

转载于:https://www.cnblogs.com/SulfurDioxideHippocampus/p/9249356.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值