1

我试图写一个复数类,重载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&”的转换</p>

我知道问题是返回值operator+是 a ComplexNumber,但ostream操作员需要 a ComplexNumber&

我不知道该如何处理。谢谢

4

1 回答 1

3

我不知道为什么它会说参数 1,但你应该让你的输出重载采用 const 引用:

ostream& operator << ( ostream &out,  const ComplexNumber &c){
                                      ^^^^^

这更好,因为可以使用临时的并且您不修改它。

于 2013-05-10T01:16:41.587 回答