编译器错误 C2990

更新:2007 年 11 月

错误消息

“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

Visual C++ 编译器中对 Visual C++ 2005 的重大更改也可能导致 C2990;对于模板规范,编译器现在要求相同类型的多个声明也应相同。有关更多信息,请参见 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;
};