模板基类可以存储指向派生但不存在对象的指针 - 为什么?

时间:2013-06-07 11:07:01

标签: c++ templates

我有以下代码,我想知道为什么我改变了

T * e;

行到

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() {};
};

1 个答案:

答案 0 :(得分:8)

首先,在您指定Derived继承自Base1<Derived>时,您的Derived类尚未完全定义(又称。不完整类型),因此编译器无法在Base1内实例化它。这就是您收到此特定错误消息的原因。

但即使编译器可以在那时实例化Derived,会发生什么? Base1<Derived>将包含Derived,其继承自Base1<Derived>,其中包含Derived,其继承了 ad infinitum 。显然这是无效的。

相关问题