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;
4

1 に答える 1

5

クラス名を前方宣言するだけです。

class Derived;

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

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

于 2012-04-05T16:23:06.580 に答える