我有以下代码,我想知道为什么我要更改
T*e;
线到
我;
它抛出一个错误:“Base1::e”使用未定义的类“Derived”
template<class T> class Base1
{
public:
Base1() {};
virtual ~Base1() {};
T* e;
};
class Base2
{
public:
Base2() {};
};
class Derived : public Base1<Derived>, Base2
{
public:
Derived() {};
~Derived() {};
};
最佳答案
一方面,在您指定 Derived
的位置继承自 Base1<Derived>
你的Derived
类尚未完全定义(也称为不完整类型),因此编译器无法在 Base1
中实例化它.这就是您收到此特定错误消息的原因。
但即使编译器可以实例化一个 Derived
到那时,会发生什么? Base1<Derived>
将包含 Derived
继承自 Base1<Derived>
其中包含 Derived
它继承了……无穷无尽。显然这是无效的。
关于c++ - 模板基类可以存储指向派生而不是对象的指针——为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16982624/