我有以下代码,其中类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