嵌套类可以先在外围类中声明,然后在外围类中定义

class List
{
private:
    class ListItem;//声明
    class Red
    {
      ListItem *pli; //在看到类体前只能定义该类的指针或引用
    };
    class ListItem //定义
    {
        Red *pref;
    };

嵌套类本质是另一个类的"类型成员",两个类作为两个命名空间,成员名可相同   //即这两个nod类声明为同一个名字是没有关系的

class Node
{
};
class Tree
{
public:
   int m_iVal;
   class Node //Tree::Node隐藏了::Node
   {
       int m_iVal;
   };
   Node *tree; //ok:被解析为嵌套类:Tree::Node
};

原文地址:https://www.cnblogs.com/carbs/p/2432091.html