Compartir a través de


Error del compilador C2990

Actualización: noviembre 2007

Mensaje de error

'clase': tipo de no clase ya se declarado como tipo de clase
'class' : non-class type as already been declared as a class type

La clase que no es de plantilla ni genérica vuelve a definir una clase de plantilla o genérica. Compruebe si hay conflictos en los archivos de encabezado.

El ejemplo siguiente genera el error C2990:

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

El error C2990 también puede producirse cuando se utilizan genéricos:

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

ref struct GC {};   // C2990

El error C2990 también puede producirse debido a un cambio importante en el compilador de Visual C++ para Visual C++ 2005; el compilador requiere ahora que varias declaraciones del mismo tipo sean idénticas en relación con la especificación de la plantilla. Para obtener más información, vea Cambios importantes en el compilador de Visual C++ 2005.

El ejemplo siguiente genera el error 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;
};