首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

C++重载运算符(+,<<)出错解决办法

2012-04-27 
C++重载运算符(+,)出错编译器是g++,版本是4.4.3-4ubuntu5.1(同样的程序我在VS2008中编译运行完全正常)自

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这样的来初始化

热点排行