现在的位置: 首页 > 综合 > 正文

VC6.0中友元函数访问类的私有成员的bug

2017年12月03日 ⁄ 综合 ⁄ 共 777字 ⁄ 字号 评论关闭

最近写程序时候遇到了一个问题,上网查了之后发现这是vc6.0的bug。

 

继上次发现getline有bug以来,这是第二次了。顿时让我想起某人说的“珍惜生命,远离VC6”,这句话太对了

 

废话不多说,问题如下代码所示:

 

这个是重载类对象的<< 操作符时遇到问题。在程序中可以看到,在类的友元函数中我访问了一个类A的私有成员m。

 

这原本是没错的,类的友元函数是可以访问该类的私有成员的,但是这里确报错了。错误提示如下:

 

cpp(17) : error C2248: 'm' : cannot access private member declared in class 'A'
cpp(13) : see declaration of 'm'
cpp(23) : error C2593: 'operator <<' is ambiguous

 

提示不能访问A的私有成员,此时再看下头文件里

#include <iostream> 
using namespace std;

 

解决这个bug有几个方法:

 

第一:把它改成#include <iostream.h>后再编译就一切正常,可以输出m的值2.

 

第二:如果你非要用#include <iostream>  using namespace std;那也行,只要把该友元函数直接定义在类的内部

 

还有其他的方法,这里不说了。

 

最后还是得说一句“珍惜生命,远离vc6"

 

 

抱歉!评论已关闭.