我正在尝试编写一个复数类,并将operator + - *
重载为朋友,如下所示:
ComplexNumber operator+(const ComplexNumber &c1, const ComplexNumber& c2)
{
return ComplexNumber(c1._r+c2._r, c1._i+c2._i);
}
ostream& operator << ( ostream &out, ComplexNumber &c){
out << c.getReal() <<'+'
<< c.getImg() <<'I' << std::endl;
}
我在做的时候没有遇到任何问题:
ComplexNumber c1(1,2);
cout << c1 << endl;
但是当我尝试执行以下操作时:
ComplexNumber c2(2,1);
cout << c1 + c2 << endl;
我收到错误:
参数1从“ComplexNumber”到“ComplexNumber&amp;”
没有已知的转换
我知道问题是operator+
的返回值是ComplexNumber
,但ostream
运算符需要ComplexNumber&
。
我不知道如何处理这件事。感谢
答案 0 :(得分:3)
我不知道它为什么会说参数1,但你应该让你的输出重载采用const引用:
ostream& operator << ( ostream &out, const ComplexNumber &c){
^^^^^
这样更好,因为可以使用临时文件而不修改它。