When you declare a nested class as a friend of its containing class, place the friend declaration after the declaration of the nested class, not before:
class A // containing class{private: int i;public: class B // nested class declared first { public: B(A & a) { a.i=0;}; // access a private member of class A }; friend class B;// friend declaration after B's declaration};
If you place the friend declaration before the nested class’s declaration, the compiler will discard it as the friend class has not been seen yet.