Consider the following example:
class SIP{ public: friend std::ostream& operator<<(std::ostream& os, const SIP& c); private: class BusStop; std::vector<BusStop*> mbusStops; }; class SIP::BusStop{ private: struct BusInfo; std::vector<BusInfo*> mbusStopTerminal; }; struct SIP::BusStop::BusInfo{ std::string from; std::string to; }; std::ostream& operator<<(std::ostream &os, const SIP &c) { for (std::vector<SIP::BusStop*>::const_iterator it = c.mbusStops.begin(); it != c.mbusStops.end(); it++){ for (std::vector<SIP::BusStop::BusInfo*>::const_iterator it2 = mbusStopTerminal.begin(); it2 != mbusStopTerminal.end(); it2++){ } } return os; } It won't compile, because the BusInfo struct is private. Friend classes can't access private members of nested classes by default. What should I do in that situation? Is there any workaround?