操作符重载的疑问:"<<"

zzghost 2003-09-16 05:11:18
随便写一个模板类:
#include <iostream>

template < class T >
class ZTest
{
friend std::ostream& operator << ( std::ostream& os,const ZTest<T>& test);

public:
ZTest ():a=0,b=0 {}
void set (T i,T j) { a=i;b=j; };
private:
T a;
T b;
};

template < class T>
std::ostream& << ( std::ostream& os, const ZTest<T>& test )
{
os <<"("<< test.a << " " << test.b << ")";
return os;
}

int main ()
{
ZTest<int> ti;
ti.set(9,10);
std::cout << ti << std::endl;
return 0;
}

编译后说operator << 中不能访问private 成员,a,b.可我已将它设为友函数了。怎么回事呢?求各位教教我.....
...全文
84 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
zzghost 2003-09-22
  • 打赏
  • 举报
回复
谢谢各楼的~~随便写的代码,错误居然这么多。:)
JIterator 2003-09-21
  • 打赏
  • 举报
回复
VC6在没打补丁时,用插入符重载会有问题的,我原来碰过的,打了SP5后就可以了
RookieStar 2003-09-21
  • 打赏
  • 举报
回复
不是编译器的错,修改初始化成员列表和加上operator就行!
albertjin123 2003-09-17
  • 打赏
  • 举报
回复
嗯,少写一个operator怎么可能编译成功
zss6587 2003-09-16
  • 打赏
  • 举报
回复
确实不是编译器问题!
zilin82 2003-09-16
  • 打赏
  • 举报
回复
不可能是编译器的问题,是你的程序本身有问题,我在上面帮你修改了,我用的是vc6.0,你说是编译器的问题,你的程序是在哪个编译器下编译成功
zilin82 2003-09-16
  • 打赏
  • 举报
回复
#include <iostream>

template < class T >
class ZTest
{
friend std::ostream& operator << ( std::ostream& os,const ZTest<T>& test);

public:
ZTest ():a=0,b=0 {}//把a=0,b=0改为a(0),b(0)
void set (T i,T j) { a=i;b=j; };
private:
T a;
T b;
};

template < class T>
std::ostream& << ( std::ostream& os, const ZTest<T>& test )//漏了operator
{
os <<"("<< test.a << " " << test.b << ")";
return os;
}

int main ()
{
ZTest<int> ti;
ti.set(9,10);
std::cout << ti << std::endl;
return 0;
}
zzghost 2003-09-16
  • 打赏
  • 举报
回复
是vc6..
我忙了半天,原来是编译器的问题..
谢谢~~
sevecol 2003-09-16
  • 打赏
  • 举报
回复
是VC6编译的?

如果是的话,这是一个VC6的bug

下载补丁或者换一个编译器。

24,860

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 工具平台和程序库
社区管理员
  • 工具平台和程序库社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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