Compartir a través de


Error del compilador C3203

Actualización: noviembre 2007

Mensaje de error

'tipo': tipo de clase no especializada no se puede utilizar como argumento de tipo para el parámetro de tipo 'parámetro'; se esperaba un tipo real
'type' : unspecialized class type can't be used as a type argument for type parameter 'param', expected a real type

Se pasó un argumento no válido a una plantilla de clase o un genérico. Se esperaba una plantilla de clase o un genérico como parámetro.

Este error puede generarse como resultado de una operación de ajuste del compilador efectuada para Visual C++ 2005: una plantilla de clase no especializada no puede usarse como argumento de plantilla en una lista de clases base. Para evitar el error C3203, agregue explícitamente los parámetros de tipo de plantilla al nombre de clase de plantilla cuando lo utilice como parámetro de plantilla en una lista de clases base. Vea Cambios importantes en el compilador de Visual C++ 2005 para obtener más información.

// C3203.cpp
template< typename T >
struct X {
   void f(X) {}
};

template< typename T >
struct Y : public X<Y> {   // C3203
// try the following line instead
// struct Y : public X<Y<T> > {
   void f(Y) {}
};

int main() {
   Y<int> y;
}

El ejemplo siguiente genera el error C3203:

// C3203_b.cpp
// compile with: /c
template <class T>
struct S1 {};

template <class T>
class C1 {};

typedef C1<S1> MyC1;   // C3203

// OK
template <template <class> class T>
class C2 {};

typedef C2<S1> MyC1;

template <class T>
class C3 {};

typedef C3<S1<int> > MyC12;

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

// C3203_c.cpp
// compile with: /clr /c
generic <class T>
value struct GS1 {};

generic <class T>
value struct GC1 {};

typedef GC1<GS1> MyGC1;   // C3203
typedef GC1<GS1<int> > MyGC2;   // OK