0

私は次のコードを持っています。

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

1 に答える 1

8

Derived1 つには、クラスから継承Base1<Derived>することを指定した時点で、Derivedまだ完全に定義されていない (別名、不完全な型) ため、コンパイラは内部でそれをインスタンス化できませんBase1。これが、この特定のエラー メッセージが表示される理由です。

しかし、コンパイラがDerivedその時点で a をインスタンス化できたとしても、何が起こるでしょうか? Base1<Derived>継承元が含まれ、Derived継承元Base1<Derived>が含まれ、Derived継承が...無限に含まれます。明らかにこれは有効ではありません。

于 2013-06-07T11:11:51.350 に答える