请教:关于操作符<<重载!

shglt 2003-09-13 07:16:05
#include <iostream>
#include <string>
using namespace std;

class CBase
{
public:
CBase(){}
virtual ~CBase(){}
friend ostream& operator<<(ostream &os, const CBase &rhs);
private:
string m_strData;
}

ostream& operator<<(ostream &os, const CBase &rhs)
{
os<<rhs.m_strData<<endl;
return os;
}

int main(void)
{
CBase aBase;
cout<<aBase;
return 0;
}

在Visual C++ 6.0中提示:
1.不能访问私有成员!----而我的operator<<定义的是友元啊,怎么不能访问呢?
2.<< is ambiguous! ----有二义行吗? string中重载了<<啊!

望各位大侠指教!
谢谢!
...全文
22 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
RookieStar 2003-09-14
  • 打赏
  • 举报
回复
用vc6以上的版本吧,这是一个编译器的问题,想当年也困扰我多时……
bm1408 2003-09-13
  • 打赏
  • 举报
回复
你换成类的成员函数试一下!
hangdian 2003-09-13
  • 打赏
  • 举报
回复
#include <iostream>
#include <string>
using namespace std;

class CBase
{
public:
CBase(){}
virtual ~CBase(){}
friend ostream& operator<<(ostream &os, const CBase &r){
os<<r.m<<endl;
return os;
}
private:
string m;
};

//ostream& operator<<(ostream &os, const CBase &r)
//{
// os<<r.m<<endl;
// return os;
//}

int main(void)
{
CBase aBase;
cout<<aBase;
return 0;
}
aflyinghorse 2003-09-13
  • 打赏
  • 举报
回复
同意楼上
我在dev-cpp下可以运行
plusir 2003-09-13
  • 打赏
  • 举报
回复
呵呵,类似的情况我也遇到过,这是VC60的一个Bug,以前在CSDN上看过一个帖子或技术文档什么的,要满足几种情况才会发生,具体的忘了,建议换编译器,或给vc60装sp5
aflyinghorse 2003-09-13
  • 打赏
  • 举报
回复
class CBase
{
public:
CBase(){}
virtual ~CBase(){}
friend ostream& operator<<(ostream &os, const CBase &rhs);
private:
string m_strData;
};///少了分号

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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