Compartilhar via


Erro do compilador C3203

'identifier': modelo de classe não especificado ou genérico não pode ser usado como um argumento de modelo ou genérico para o parâmetro 'parameter' de modelo ou genérico, esperado um tipo real

Você passou um argumento inválido para um genérico ou modelo de classe. O modelo de classe ou genérico espera um tipo como parâmetro.

Esse erro pode ser gerado como resultado do trabalho de conformidade do compilador que foi feito para o Visual Studio 2005: um modelo de classe não especializado não pode ser usado como um argumento de modelo em uma lista de classes base. Para resolver o C3203, adicione explicitamente os parâmetros de tipo de modelo ao nome de classe do modelo ao usá-lo como um parâmetro de modelo em uma lista de classes base.

// 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;
}

O seguinte exemplo gera o erro C3203 e mostra como corrigi-lo:

// 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;

C3203 também pode ocorrer ao usar 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