当作为其包含类的友元来声明一个嵌套类时,你应当将友元声明放于嵌套类声明的后面,而不是前面:
class A {private: int i;public: class B /*先定义嵌套类*/ { public: B(A & a) { a.i=0;}; }; friend class B;/*友元声明*/ };
如果你把友元声明放置于嵌套类声明之前,编译器将丢弃友元声明,因为编译器还没有见过它,不知道它是什么玩意儿。
注:关于嵌套类定义
A nested class is any class whose declaration occurs within the body of another class or interface. A top level class is a class that is not a nested class.
一个 class A 如果定义在了另一个 class B 或 interface B 里,那么这个 class A 就是 nested class,class B 或 interface B 则被称为 enclosing class。至于 class A 是定义在了 class B 或 interface B 的什么地方,例如 method 和 constructor,则是没有限制的。
copyright:2016-2020|邮箱:imalib@vip.163.com
蜀ICP备16020986号