c++ 重载运算符问题,求高手解答

IWontQuit 2014-12-26 10:33:56
在一个文件里,我定义了两个类,假设一个为class1,一个为class2这两个类都要重载<<运算符,重载内容不同,把重载的方法设为友元
声明方法为ostream& operator<<(ostream& os,class1(class2)& c)
这两个方法我都在类外实现,为什么会报错说:ambiguous
我把这两方法都分别在类内部实现作为内联函数,就可以运行了,这是为什么?
...全文
236 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
lm_whales 2015-01-08
  • 打赏
  • 举报
回复
必须为友元,形式为:
ostream& operator<<(ostream& os,const class1& c);
//示例:
class {
//类内友元函数实现
friend ostream& operator<<(ostream& os,const class1& c){//类内实现
//
return os;
};

};

class2{
//类内声明(为友元)
friend ostream& operator<<(ostream& os,const class1& c);

};
//类外实现
ostream& operator<<(ostream& os,const class2& c){
//........................
return os;
}
PS: ostream 最好加上 std::
woyu783 2014-12-27
  • 打赏
  • 举报
回复
流运算符的重载 要声明成友元函数吧
fly_dragon_fly 2014-12-26
  • 打赏
  • 举报
回复
应该不会有这问题,代码贴来看一下
pengzhixi 2014-12-26
  • 打赏
  • 举报
回复
如果你把重载的这两个函数都放.h文件应该不会有你说的那个问题。当然前提是你class1和class2没有isA的关系
passion_wu128 2014-12-26
  • 打赏
  • 举报
回复
你看STL源码,几乎都是声明为友元,在类外实现。 你的class1和class2是怎么定义的,把构造函数贴出来看看。

65,187

社区成员

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

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