コンパイラ エラー C2990

更新 : 2007 年 11 月

エラー メッセージ

'クラス' : 非クラス '型' は、既にクラス '型' として宣言されていました

非ジェネリック クラスまたは非テンプレート クラスは、ジェネリック クラスまたはテンプレート クラスを再定義します。ヘッダー ファイルに矛盾がないかどうかを調べてください。

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

// C2990.cpp
// compile with: /c
template <class T>
class C{};
class C{};   // C2990

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

// C2990b.cpp
// compile with: /clr /c
generic <class T>
ref struct GC;

ref struct GC {};   // C2990

C2990 は、Visual C++ 2005 の Visual C++ コンパイラの互換性に影響する変更点が原因で発生することもあります。1 つの型に対する複数の宣言がテンプレートの仕様に関して一致することがコンパイラで要求されるようになりました。詳細については、「Visual C++ 2005 コンパイラの互換性に影響する変更点」を参照してください。

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

// C2990c.cpp
// compile with: /c
template<class T>
class A;

template<class T>
struct A2 {
   friend class A;   // C2990
};

// OK
template<class T>
struct B {
   template<class T>
   friend class A;
};