VC6.0中友元函數訪問類的私有成員的bug

最近寫程序時候遇到了一個問題,上網查了之後發現這是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"

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章