例如,我试图做这样的事情:为什么不能将多态派生类嵌套在基类中?
class Animal {
public:
virtual const char *says() const = 0;
static Animal *makeLion() { return new Lion(); }
static Animal *makeTiger() { return new Tiger(); }
static Animal *makePig() { return new Pig(); }
private:
class Lion : public Animal { // error: invalid use of incomplete type ‘class Animal’
public:
virtual const char *says() const
{
return "roar";
}
};
class Tiger : public Animal { // error: invalid use of incomplete type ‘class Animal’
public:
virtual const char *says() const
{
return "meow";
}
};
class Pig : public Animal { // error: invalid use of incomplete type ‘class Animal’
public:
virtual const char *says() const
{
return "That\'s all Folks!";
}
};
};
编译器抱怨Animal
是一个不完整的类型。但是为什么Animal
是一个不完整的类型,如果不需要内部类定义来定义外部类本身(因为没有内部类类型的非静态变量由外部类中的值声明)?
有没有办法解决这个问题,或者更好的方法来做我想做的事情?
一个类没有完成,直到你到达关闭'};'。 – NathanOliver
在完成之前,课程并不完整。你试图做到这一点的动机是什么? –
@NathanOliver:这不完全正确。你可以在'Animal'中声明'Animal'的静态成员。据我所知,内部类被视为静态。 – Matt