コンパイラ エラー C3203

更新 : 2007 年 11 月

エラー メッセージ

'型' : 非特殊クラス '型' は '型' 引数として型パラメータ 'param' に使用できません。実際の型を指定してください

クラス テンプレートまたはジェネリックに渡された引数が無効です。クラス テンプレートまたはジェネリックには、パラメータとして型を渡す必要があります。

このエラーは、Visual C++ 2005 で行ったコンパイラ準拠作業の結果として生成されることがあります。非特殊クラスのテンプレートは、基本クラス リストのテンプレート引数として使用できません。C3203 を解決するには、テンプレート クラス名を基本クラス リストのテンプレート パラメータとして使用するときに、テンプレート型のパラメータをテンプレート クラス名に明示的に追加します。詳細については、「Visual C++ 2005 コンパイラの互換性に影響する変更点」を参照してください。

// C3203.cpp
template< typename T >
struct X {
   void f(X) {}
};

template< typename T >
struct Y : public X<Y> {   // C3203
// try the following line instead
// struct Y : public X<Y<T> > {
   void f(Y) {}
};

int main() {
   Y<int> y;
}

次の例では C3203 エラーが生成されます。

// C3203_b.cpp
// compile with: /c
template <class T>
struct S1 {};

template <class T>
class C1 {};

typedef C1<S1> MyC1;   // C3203

// OK
template <template <class> class T>
class C2 {};

typedef C2<S1> MyC1;

template <class T>
class C3 {};

typedef C3<S1<int> > MyC12;

C3203 は、ジェネリックを使用しているときも発生します。

// C3203_c.cpp
// compile with: /clr /c
generic <class T>
value struct GS1 {};

generic <class T>
value struct GC1 {};

typedef GC1<GS1> MyGC1;   // C3203
typedef GC1<GS1<int> > MyGC2;   // OK