- 1、本文档共4页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 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
您可能关注的文档
最近下载
- 2022年一级造价师-土建案例-陈江潮精讲班完整讲义.pdf
- 第一册: 标准设计与典型造价 V3.0版 智能配电站.pdf
- 第二课性骚扰的危害 课件 2024—2025学年华东师大版(2024))初中体育与健康七年级全一册.pptx VIP
- 《工程勘察设计收费管理规定》计价格【2002】10号.doc
- 【国家标准】GB14759-2010 食品安全国家标准 食品添加剂 牛磺酸.pdf
- 2020年广西防城港中考生物真题及答案.doc VIP
- 前列腺癌的基础知识.pptx
- 食品安全管理员考试试题及答案(2025版).docx VIP
- 2025年中国空调离合器皮带轮市场现状分析及前景预测报告.docx
- (2)IT运维管理:ITIL先锋论坛—DevOps来了运维如何改变.docx
文档评论(0)