操作员超载为朋友

时间:2013-05-10 01:13:45

标签: c++ operator-overloading

我正在尝试编写一个复数类,并将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&

我不知道如何处理这件事。感谢

1 个答案:

答案 0 :(得分:3)

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

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

这样更好,因为可以使用临时文件而不修改它。