谭浩强c++ 运算符重载编译有问题

h_5_hao 2009-03-14 10:51:48
#include <iostream>
using namespace std;
class Complex
{
public:
friend ostream operator<<(ostream&os,Complex&c);

Complex(){real=0;imag=0;}
Complex(float r,float i):real(r),imag(i){}
Complex operator+(Complex&a)
{
Complex c;
c.real=real+a.real;
c.imag=imag+a.imag;
return c;
}

Complex operator-(Complex&a)
{
Complex c;
c.real=real-a.real;
c.imag=imag-a.imag;
return c;
}
float get_real(){return real;}
float get_imag(){return imag;}


private:
float real;
float imag;
};

ostream& operator<<(ostream&os,Complex&c )
{
os<<c.real<<'+'<<c.imag<<'i'<<endl;
return os;
}
int main()
{
Complex c1(15,42),c2(74,65),c3;
c3=c1-c2;
cout<<c3;

return 0;
}

...全文
116 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
ytzxj 2009-03-14
  • 打赏
  • 举报
回复
friend ostream operator < <(ostream&os,Complex&c);
ostream& operator < <(ostream&os,Complex&c )
{
os < <c.real < <'+' < <c.imag < <'i' < <endl;
return os;
}
根本不相配,
h_5_hao 2009-03-14
  • 打赏
  • 举报
回复
谢谢大家了 呵呵~
xylicon 2009-03-14
  • 打赏
  • 举报
回复
#include <iostream> 
using namespace std;

class Complex; //
ostream& operator<<(ostream& os,Complex& c); // 必需在定义友元函数 friend ostream& operator<< 之前声明该函数

class Complex
{
public:
friend ostream& operator<<(ostream& os,Complex& c); // 这里返回类型应该是ostream&

Complex(){real=0;imag=0;}
Complex(float r,float i):real(r),imag(i){}
Complex operator+(Complex&a)
{
Complex c;
c.real=real+a.real;
c.imag=imag+a.imag;
return c;
}

Complex operator-(Complex&a)
{
Complex c;
c.real=real-a.real;
c.imag=imag-a.imag;
return c;
}
float get_real(){return real;}
float get_imag(){return imag;}


private:
float real;
float imag;
};

ostream& operator<<(ostream& os, Complex& c)
{
os << c.real <<'+' << c.imag <<'i' << endl;
return os;
}


int main()
{
Complex c1(15,42),c2(74,65),c3;
c3=c1-c2;
cout << c3;

return 0;
}
  • 打赏
  • 举报
回复
此外,如果你是VC6,friend函数的定义最好放在类体里,不然容易出错。
  • 打赏
  • 举报
回复
ostream& operator < <(ostream&os,Complex&c ) //在类外,你不用标明类的作用域的?
{
os < <c.real < <'+' < <c.imag < <'i' < <endl;
return os;
}
  • 打赏
  • 举报
回复


friend ostream operator <<(ostream&os,Complex&c);

改为

friend ostream& operator <<(ostream&os,Complex&c);
fairchild811 2009-03-14
  • 打赏
  • 举报
回复
class Complex
{
public:
friend ostream operator <<(ostream&os,Complex&c);

---->

class Complex
{
public:
friend ostream& operator <<(ostream&os,Complex&c);
sagegz 2009-03-14
  • 打赏
  • 举报
回复
好了,LZ对照下吧.

#include <iostream>

using namespace std;
class Complex
{
public:
friend ostream& operator <<(ostream& os,Complex &c); //这里返回类型是ostream&
Complex(){real=0;imag=0;}
Complex(float r,float i):real(r),imag(i){}
Complex operator+(Complex &a)
{
Complex c;
c.real=real+a.real;
c.imag=imag+a.imag;
return c;
}
Complex operator-(Complex &a)
{
Complex c;
c.real=real-a.real;
c.imag=imag-a.imag;
return c;
}
float get_real(){return real;}
float get_imag(){return imag;}


private:
float real;
float imag;
};

ostream& operator <<(ostream &os,Complex &c )
{
os <<c.real <<'+' <<c.imag <<'i' <<endl;
return os;
}
int main()
{
Complex c1(15,42),c2(74,65),c3;
c3=c1-c2;
cout <<c3;
return 0;
}

65,211

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧