博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
运算符重载must take either zero or one argument错误
阅读量:6500 次
发布时间:2019-06-24

本文共 933 字,大约阅读时间需要 3 分钟。

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

你可能感兴趣的文章
环形动画加载视图AnimatedCircleLoadingView
查看>>
Centos 7使用vsftpd搭建FTP服务器
查看>>
tcpdump抓包文件提取http附加资源
查看>>
linux下SVN不允许空白日志提交
查看>>
第2周第1课
查看>>
docker制作镜像篇(基于容器)
查看>>
山寨c 标准库中的getline 函数
查看>>
shell时间
查看>>
pfSense book之2.4安装指南
查看>>
org.springframework.data.redis 一次连接获取特定key所有k-v(pipeline)
查看>>
[译稿]同步复制提议 2010-09
查看>>
windows 自动化目录大纲(各企业架构不一样,按需选择)
查看>>
我的友情链接
查看>>
【Visual C++】游戏开发笔记十三 游戏输入消息处理(二) 鼠标消息处理
查看>>
我的友情链接
查看>>
Java 使用 Redis
查看>>
JPA常用注解
查看>>
Java基础学习总结(1)——equals方法
查看>>
Maven学习总结(6)——Maven与Eclipse整合
查看>>
HTML5:理解head
查看>>