C++ 私人班的朋友

C++ 私人班的朋友,c++,friend,C++,Friend,如何为私有类定义朋友 #include <iostream> class Base_t{ private: struct Priv_t{ friend std::ostream & operator<<(std::ostream &os, const Priv_t& obj); } p; friend std::ostream & operator<<(s

如何为私有类定义朋友

#include <iostream>

class Base_t{
    private:
        struct Priv_t{
            friend std::ostream & operator<<(std::ostream &os, const Priv_t& obj);
        } p;
    friend std::ostream & operator<<(std::ostream &os, const Base_t& obj);
};

std::ostream & operator<<(std::ostream &os, const Base_t& obj) {
    return os << "base: " << obj.p;
}

std::ostream & operator<<(std::ostream &os, const Base_t::Priv_t& obj) {
    return os << "priv";
}

int main() {
    Base_t b;
    std::cout << b << std::endl;
}
#包括
类基类{
私人:
私有结构{

friend std::ostream&operator对于
Priv\u t
的重载必须是
Base\u t
以及
Priv\u t

的朋友,而
Priv\u t
是一个私人声明,您应该移动

friend std::ostream & operator<<(std::ostream &os, const Base_t::Priv_t& obj);

友谊必须明确:

class Base_t
{
//...
private:
    //... 
    // Add:
    friend std::ostream & operator<<(std::ostream &os, 
                                               const Base_t::Priv_t& obj);
};
class-Base\t
{
//...
私人:
//... 
//加:

friend std::ostream&Operator下一篇没有行号的代码帖子,请!
friend std::ostream & operator<<(std::ostream &os, const Base_t::Priv_t& obj);
class Base_t
{
private:
  struct Priv_t
  {
  } p;
  friend std::ostream & operator<<(std::ostream &os, const Base_t& obj);
  friend std::ostream & operator<<(std::ostream &os, const Base_t::Priv_t& obj);
};
class Base_t
{
//...
private:
    //... 
    // Add:
    friend std::ostream & operator<<(std::ostream &os, 
                                               const Base_t::Priv_t& obj);
};