我有以下代碼,其中類A聲明類B爲朋友。在B類中聲明的C類是否應該能夠查看A類的私人聲明/成員?一個類的「朋友」是否擴展到該類中聲明的類?
它使用CL版本16(Visual Studio 2010)編譯沒有錯誤,但gcc g ++版本4.1.1給出了錯誤「typedef int A :: T在此上下文中是私有的」。
函數調用發生的行爲與typedefs相同(這是我發現的區別)。
class A {
friend class B;
typedef int T;
};
class B {
A::T t; // ok
typedef A::T U; // ok
class C {
U u; // ok
A::T v; // compile error on gcc
};
};
我簡要介紹了一下,但未能找到正確的搜索關鍵字。我還沒有閱讀標準。是否有任何關於此主題的問題,或在C++ FAQ中提及?標準會影響哪種行爲?
請參閱http://stackoverflow.com/questions/3584385/friend-access-to-protected-nested-class。 – 2011-05-12 08:39:52
這段代碼看起來很適合我。獲取gcc 4.5.1和在線上的comeau編譯。 – 2011-05-12 08:45:24
Prasoon:呵呵。我想知道爲什麼我的gcc過時了,它應該是新安裝的。好吧。謝謝! – 2011-05-12 09:00:04