网站大量收购独家精品文档,联系QQ:2885784924

VC6.0中重载操作符友元函数无法访问类的私有成员的解决办法.docx

VC6.0中重载操作符友元函数无法访问类的私有成员的解决办法.docx

  1. 1、本文档共4页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
VC6.0中重载操作符友元函数无法访问类的私有成员的解决办法

VC6.0中重载操作符友元函数无法访问类的私有成员的解决办法VC6.0中重载操作符友元函数无法访问类的私有成员的解决办法:在C++中,操作符(运算符)可以被重载以改写其实际操作。同时我们可以定义一个函数为类的友元函数(friend function)以便使得这个函数能够访问类的私有成员,这个定义通常在头文件中完成。在Visual C++中定义一般的函数为友元函数通常是没有问题的。然而对某些重载操作符的函数,即使我们将它们定义为类的友元函数,VC的编译器仍然会显示出错信息,认为这些友元函数无权访问类的私有成员。我认为这应该是VC6.0编译器与标准C++不兼容的地方。以下代码就是个例子:// 头文件“Sample.h” #includeiostreamusing namespace std;class Sample{public:Sample();friendostream operator(ostream out, const Sample s);friendistream operator(istream in, Sample s);private:int x;};// 实现文件“Sample.cpp” #include “Sample.h” Sample::Sample() { x=0;}istream operator(istream in, Sample s){cout”Please enter a value”endl;in s.x ;return in;}ostream operator(ostream out, const Sample s) {cout s.x endl;return out; }以上代码在gnuc++中编译运行毫无问题。但是在VC++6.0中编译的时候就会出现以下的编译错误:Compiling…Sample.cppc:\temp\sample.cpp(8) : error C2248: ‘x’ : cannot access private member declared in class ‘Sample’c:\temp\sample.h(19) : see declaration of ‘x’c:\temp\sample.cpp(13) : error C2248: ‘x’ : cannot access private member declared in class ‘Sample’c:\temp\sample.h(19) : see declaration of ‘x’Error executing cl.exe.Sample.obj - 2 error(s), 0 warning(s)在VC++ 6.0中解决这个问题有以下几种方法:第一种方法:在头文件中类定义之前将类和友元操作符函数的原型特别声明一下,也就是将头文件修改如下(实现文件”Sample.cpp”不用作任何修改):// 修改后的头文件 2 “Sample.h” #includeiostreamusing namespace std; // 以下3行代码为新加入class Sample;ostream operator(ostream out, const Sample s);istream operator(istream in, Sample s);class Sample {public:Sample();friendostream operator(ostream out, constSample s);friendistream operator(istream in, Sample s);private:int x; };第二种方法:在头文件中实现作为友元函数的操作符函数的重载,也就是说在实现文件“Sample.cpp”中将函数重载的实现去掉,而将头文件修改如下:// 修改后的头文件 1 “Sample.h” #includeiostreamusing namespace std;class Sample {public:Sample();friendostream operator(ostream out, const Sample s);friendostream operator(ostream out, const Sample s) {cout s.x endl;return out; }friendistream operator(is

文档评论(0)

xcs88858 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档