各种错误(C++)

OS X EI Capitan [10.11.6] 
Xcode [8.0]

C++

代码:

#include<iostream>

#include<math.h>

#include"MyComplex.h"

usingnamespacestd;

int main(int argc,constchar * argv[]) {

   // insert code here...

   MyComplex c1;

   MyComplex c2;

   cin >> c1;

    c2 = c1;

   cout << c1 <<endl;

   cout << c2 <<endl;

   MyComplex c3;

    c3 = c1+c2;//error1:No viable overloaded '='

    cout << c1+c2 << Lendl;//error2: No matching constructor for initialization of 'MyComplex'

    cout << c1-c2 << Lendl;//error

    cout << c1/c2 << Lendl;//error

    cout << c1*c2 << Lendl;//error

    

   return0;

}


那么对于=的重载是如何定义的呢?请看代码。

    MyComplex&operator = (MyComplex &rhs){

        real = rhs.getReal();

        imaginary = rhs.getImaginary();

        return *this;

    }


看起来并没有什么问题。通过查阅 http://www.cplusplus.com/forum/general/153830/ 找到了错误原因:

Peter87大神说:A temporary object can't bind to a non-const reference. 

(临时对象不能与非常量引用绑定,也就是说,绑定的引用必须是常量)

因此,重载=函数的形参必须是const。(如此隐蔽的错误真是欲哭无泪。。。)

加了const后error1消失:

    MyComplex&operator = (constMyComplex &rhs){

        real = rhs.getReal();

        imaginary = rhs.getImaginary();

        return *this;

    }

error2也是同样的错误原因。

    friend ostream&operator<<(ostream& os,const MyComplex &c);

const是非常重要的!要的!的!!!

改完后error都消失了
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值