2012-04-05 12 views
1

私は前方に宣言する必要があるテンプレートクラスから派生したクラスを宣言することを試みています。ここで前方宣言されたテンプレートの基本クラスから派生したクラスを宣言するにはどうすればよいですか?

は、クラスの例です。ここで

class TType { 
public: 
    TType() { } 
}; 

template<typename T> 
class Base { 
public: 
    Base() { } 
}; 

class Derived : public Base<TType> { 
public: 
    Derived() { } 
}; 

は、私は必要なものではなかったの推測です:

class TType; 
template<typename T> class Base; 
class Derived : public Base<TType>; // This fails 
Derived* pDerived; 

答えて

5

ちょうど前方のクラス名を宣言します。

class Derived; 

宣言にクラスに関する情報を追加することはできません。基本クラス、メンバーなどは、クラス定義でのみ宣言できます。

この前方宣言は、ポインタまたは参照の宣言(例ではpDerivedなど)や、引数または戻り値の型としてDerivedの関数の宣言など、さまざまな処理を行うために使用できます。クラスのサイズ、基底クラス、メンバーを知る必要がある場合は、完全な定義が必要です。

+0

あなたはもちろん正しいですが、私がそれを試みたときに失敗しました。私の間違いは、前方宣言で 'namespace {class Derived} 'と' class Derived; 'でした。明らかに 'namespace'を使って何かが名前空間を持たないと言うのは、' namespace'をスキップするのと同じではないので、コンパイラはあいまいであると私に言っていました。 – Solx

関連する問題