友元函数问题!!

Ronal_Lee 2007-04-16 03:26:15
class Complex
{
public:
........
friend ostream & operator <<(ostream & s, Complex & r);
........
private:
float m_fReal;
float m_fImage;

};

以上是complex.h头文件里的部分内容

然后我在main函数所在的main.cpp文件中实现了这个友元函数
ostream & operator <<(ostream & s, Complex & r)
{
s<<"复数:("<<r.GetReal()<<")+"<<"("<<r.GetImage()<<")"<<endl;
return s;
}


然后:
void main(void)
{
Complex a;
cout<<a;
}

编译出现这个错误:error C2593: 'operator <<' is ambiguous
错误在cout<<a这一行
怎么回事啊 !!!!
...全文
233 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
linuxhaha 2007-04-16
  • 打赏
  • 举报
回复
实现本来就不应该放在main中。
你在dev-c++里编译试试。
yutaooo 2007-04-16
  • 打赏
  • 举报
回复
我觉得,有意的采用名称空间分割是合适的解决方案。大致如下:

namespace my_namespace {

class Complex {
private:
friend std::ostream & operator <<(std::ostream & s, Complex & r);
private:
float real_;
float image_;
};

std::ostream & operator << (std::ostream & s, Complex & r) {
s << "复数:("
<< r.real_
<< ")+"
<< "("
<< r.image_
<< ")"
<< std::endl;
return s;
}
}

这里要将这个operator << 与 Complex 放在一个 namespace 中。
Ronal_Lee 2007-04-16
  • 打赏
  • 举报
回复
很明显你已经实现了Complex::GetReal和Complex::GetImage了呀。
================================
呵呵,我就是想实现一下<<的重载!

当我把友元函数的实现 放在complex.cpp文件中时,就正确无错误!

如果是声明的问题,那怎么申明呢?
yutaooo 2007-04-16
  • 打赏
  • 举报
回复
1.我觉得你不需要friend呀。这点是根据你 operator << 的实现看出的。

ostream & operator <<(ostream & s, Complex & r)
{
s<<"复数:("<<r.GetReal()<<")+"<<"("<<r.GetImage()<<")"<<endl;
return s;
}

很明显你已经实现了Complex::GetReal和Complex::GetImage了呀。

2.我觉得这个问题是一个根据实参查找(ADL)的问题。我认为,这里你应该定义一个namespace,将Complex类和operator <<放进这个namespace空间去。以便隔离,支援ADL。
guanwl 2007-04-16
  • 打赏
  • 举报
回复
就是个声明不正确的问题.
Ronal_Lee 2007-04-16
  • 打赏
  • 举报
回复
但是我把友元函数的实现 放在complex.cpp文件中时,就正确无错误!
merlinfang 2007-04-16
  • 打赏
  • 举报
回复
是不是没有声明?
class Complex;
extern ostream & operator <<(ostream & s, Complex & r);


class Complex
{
public:
........
friend ostream & operator <<(ostream & s, Complex & r);
........
private:
float m_fReal;
float m_fImage;

};
taodm 2007-04-16
  • 打赏
  • 举报
回复
http://community.csdn.net/Expert/TopicView1.asp?id=5468170

64,281

社区成员

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

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