Поделиться через


Ошибка компилятора C2990

"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 также может произойти из-за критического изменения компилятора Microsoft C++ для Visual Studio 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;
};