'class' : 非クラス型は、クラス型として既に宣言されています
非ジェネリック クラスまたは非テンプレート クラスは、ジェネリック クラスまたはテンプレート クラスを再定義します。 ヘッダー ファイルの競合を確認します。
次の例では 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 Studio 2005 の Microsoft C++ コンパイラでの重大な変更によって発生することもあります。コンパイラでは、同じ型の複数の宣言がテンプレートの指定と同じであることを要求するようになりました。
次の例では 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;
};