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

IWontQuit 学生  2014-12-26 10:33:56
在一个文件里,我定义了两个类,假设一个为class1,一个为class2这两个类都要重载<<运算符,重载内容不同,把重载的方法设为友元
声明方法为ostream& operator<<(ostream& os,class1(class2)& c)
这两个方法我都在类外实现,为什么会报错说:ambiguous
我把这两方法都分别在类内部实现作为内联函数,就可以运行了,这是为什么?
...全文
214 点赞 收藏 5
写回复
5 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
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是怎么定义的,把构造函数贴出来看看。
回复
相关推荐
发帖
C++ 语言
创建于2007-09-28

6.0w+

社区成员

C++ 语言相关问题讨论,技术干货分享,前沿动态等
申请成为版主
帖子事件
创建了帖子
2014-12-26 10:33
社区公告
暂无公告