嵌套的C++类是否可以继承其封闭类?

Ton*_*ony 21 c++ inheritance nested-class

我正在尝试执行以下操作:

class Animal
{
    class Bear : public Animal
    {
        // …
    };

    class Giraffe : public Animal
    {
        // …
    };
};
Run Code Online (Sandbox Code Playgroud)

...但是我的编译器似乎对此嗤之以鼻.这是合法的C++,如果没有,是否有更好的方法来完成同样的事情?基本上,我想创建一个更清晰的类命名方案.(我不想Animal从公共基类派生和内部类)

Ric*_*olf 45

您可以执行所需的操作,但必须延迟嵌套类的定义.

class Animal
{
   class Bear;
   class Giraffe;
};

class Animal::Bear : public Animal {};

class Animal::Giraffe : public Animal {};
Run Code Online (Sandbox Code Playgroud)


Tad*_*pec 15

在到达定义的末尾之前,类类型被认为是不完整的.您不能从不完整的类继承,因此您不能从封闭的类继承.

编辑:更正
正如理查德沃尔夫纠正我:如果你延迟嵌套类的定义,可以继承封闭类.详情请见他的回答.