C++重载运算符(+,<<)出错
编译器是g++,版本是4.4.3-4ubuntu5.1(同样的程序我在VS2008中编译运行完全正常)
自定义Complex类,我重载了+和<<用于Complex类的加法运算和输出(我只贴出了和问题相关的部分)。
在main函数中语句'cout<<c1+c2<<endl;'处出错,百思不得其解,求高人指点,不胜感激!
出错信息:error: no match for ‘operator<<’ in ‘std::cout << operator+(((Complex&)(& c1)), ((Complex&)(& c2)))’|
然后给出了一大堆candidate,包括我重载过的ostream & operator<<(ostream &out,Complex &y);出错信息中函数operator+的参数非常诡异,为何要类型转换呢?
#include <iostream>
using namespace std;
class Complex{
friend Complex operator+(Complex &x,Complex &y);
friend ostream & operator << (ostream &out,Complex &y);
public:
Complex(int x=0,int y=0):real(x),imag(y){}
private:
int real;
int imag;
};
Complex operator +(Complex &x,Complex &y)
{
return Complex(x.real+y.real,x.imag+y.imag);
}
ostream &operator <<(ostream &out,Complex &y)
{
out<<"("<<y.real;
if(y.imag>=0)
{
out<<"+";
}
out<<y.imag<<"i"<<")";
return out;
}
int main()
{
Complex c1(5,3), c2(2,-5), c3;
cout<<c1<<"+"<<c2<<"=";//(5+3i)+(2-5i)=
cout<<c1+c2<<endl;//出错误的地方!!!
return 0;
}
[解决办法]
friend Complex operator+(Complex &x,Complex &y);
friend ostream & operator << (ostream &out,Complex &y);
==>
friend Complex operator+(const Complex &x,const Complex &y);
friend ostream & operator << (ostream &out,const Complex &y);
所有的地方都做如下更改.
因为
非const引用无法用 1+2这样的来初始化