コンパイラ エラー C2993

更新 : 2007 年 11 月

エラー メッセージ

'identifier' : 非型テンプレート パラメータ 'parameter' に対する無効な型です。

構造体または共用体の引数ではテンプレートを宣言できません。構造体や共用体をテンプレートのパラメータとして渡すには、ポインタを使用してください。

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

// C2993.cpp
// compile with: /c
// C2993 expected
struct MyStruct {
   int a;char b;
};

template <class T, struct MyStruct S>   // C2993

// try the following line instead
// template <class T, struct MyStruct * S>
class CMyClass {};

このエラーは、浮動小数点非型テンプレート パラメータが使用できなくなった Visual Studio .NET 2003 で行ったコンパイラ準拠作業の結果として生成されることもあります。C++ の標準では、浮動小数点非型テンプレート パラメータを許可していません。

関数テンプレートの場合は、関数引数を使用して、浮動小数点非型テンプレート パラメータを渡します。このコードは、Visual Studio .NET 2003 と Visual Studio .NET の両方のバージョンの Visual C++ で有効です。クラス テンプレートの場合、簡単な代替手段はありません。

詳細については、「Summary of Compile-Time Breaking Changes」を参照してください。

// C2993b.cpp
// compile with: /c
template<class T, float f> void func(T) {}   // C2993

// OK
template<class T>   void func2(T, float) {}