c++操作符重载问题

p11*p12;p13=p11;可以过但是组合起来p13=p11*p12不能过了,为什么谢谢大家一共是以下两点没有注意到1:这里编不过的原因主要是:*返回的是一个对象而=... p11*p12;
p13=p11; 可以过
但是组合起来
p13=p11*p12
不能过了,为什么
谢谢大家
一共是以下两点没有注意到
1:这里编不过的原因主要是:*返回的是一个对象而=要的是一个引用
2:关于const: 在一个加了const限定符的成员函数中,不能够调用 非const成员函数。int People::getAge() s要加const 谢谢ckpyn的帮助
展开
 我来答
ckpyn
2014-07-18 · TA获得超过2052个赞
知道小有建树答主
回答量:1179
采纳率:85%
帮助的人:378万
展开全部
这个错误的意思是:
在一个加了const限定符的成员函数中,不能够调用 非const成员函数。
你的操作符重载operator*中,要将重载函数定义为const,即
People People::operator*(const People &p1) const { //为了防止错误修改参数,形参部分也要
//添加const
People p2;
p2.age=this->getAge()*p1.getAge();
p2.setSex(1);
//return People(1,2); //既然前面修改了对象p2的值,这里应该返回p2
return p2;
}

如果满意,欢迎采纳,谢谢
如有疑问,欢迎追问。
1062665477
2014-07-18 · TA获得超过553个赞
知道小有建树答主
回答量:166
采纳率:0%
帮助的人:232万
展开全部
p13 = p11*12不能过得原因是 operator*返回的是临时变量,而你opertor=操作需要的是引用变量。会让编译器找不到需要的operator=操作。建议在operator=参数上加上const。或者让operator*操作返回引用即可。
更多追问追答
追问
operator=参数上加上const 报这个错People::getAge()' discards qualifiers是什么原因啊?还有怎样operator*操作返回引用?
追答
你的实现中operator*不能返回引用。你可以改opertor=,参数变成const People& p1。并且你的getAge函数需要加上const。例如getAge()const{}
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
禧键静7716
2014-07-18 · 超过66用户采纳过TA的回答
知道答主
回答量:122
采纳率:0%
帮助的人:125万
展开全部
你可以试着将
“friend tmat<T> operator * (tmat<T> a, tmat<T> b);“
改为:
friend tmat<T> operator * (const tmat<T>& a, const tmat<T>& b);
记得在函数声明和实现的地方都这样改,应该就可以了。
vC6的检查是相当宽松的。
是否可以解决您的问题?
追问
但是这样改
People People::operator *(const People &p1)
报这个错
passing `const zbl_namespace::People' as `this' argument of `int zbl_namespace::People::getAge()' discards qualifiers
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
小小金小小鹏
2014-07-18 · TA获得超过190个赞
知道小有建树答主
回答量:343
采纳率:100%
帮助的人:68.4万
展开全部
地址不能运算
追问
用的不是地址
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式