0

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

T* e;

线到

T;

它抛出一个错误:“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() {};
};
4

1 回答 1

8

一方面,在您指定从您的类Derived继承的地方尚未完全定义(又名不完整类型),因此编译器无法在. 这就是您收到此特定错误消息的原因。Base1<Derived>DerivedBase1

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

于 2013-06-07T11:11:51.350 回答