Condividi tramite


Errore del compilatore C3856

'type': la classe non è un tipo di classe

Osservazioni:

La causa più comune di questo errore è quando sono presenti elenchi di parametri generici o modello al punto di definizione di quanto non ci fosse al momento della dichiarazione.

Esempi

L'esempio seguente genera l'errore C3856:

// C3856.cpp
template <class T>
struct S {
   template <class T1>
   struct S1;
   void f();
};

template <class T>   // C3856
template <class T1>
template <class T2>  // extra template parameter list in definition
struct S<T>::S1{};

Possibile soluzione:

// C3856b.cpp
// compile with: /c
template <class T>
struct S {
   template <class T1>
   struct S1;
   void f();
};

template <class T>
template <class T1>
struct S<T>::S1{};

C3856 può verificarsi anche quando si usano generics:

// C3856c.cpp
// compile with: /clr
generic <class T>
ref struct GS {
   generic <class U>
   ref struct GS2;
};

generic <class T>
generic <class U>
generic <class V>
ref struct GS<T>::GS2 {};   // C3856

Possibile soluzione:

// C3856d.cpp
// compile with: /clr /c
generic <class T>
ref struct GS {
   generic <class U>
   ref struct GS2;
};

generic <class T>
generic <class U>
ref struct GS<T>::GS2 {};