Erreur du compilateur C3203
Mise à jour : novembre 2007
Message d'erreur
'type' : la classe non spécialisée type ne peut pas être utilisée comme argument type pour le paramètre type 'param' ; type réel attendu
'type' : unspecialized class type can't be used as a type argument for type parameter 'param', expected a real type
Vous avez passé un argument non valide pour un modèle ou générique de classe. Le modèle ou générique de classe attend un type comme paramètre.
Cette erreur peut être due à la mise en conformité du compilateur pour Visual C++ 2005 : un modèle de classe non spécialisé ne peut pas être utilisé comme argument template dans une liste de classes de base. Pour remédier à l'erreur C3203, ajoutez explicitement le ou les paramètres de type au nom de la classe de modèle lorsque vous l'utilisez comme paramètre de modèle dans une liste de classes de base. Pour plus d'informations, consultez Modifications avec rupture dans le compilateur Visual C++ 2005.
// 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;
}
L'exemple suivant génère l'erreur 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;
L'erreur C3203 peut également se produire lors de l'utilisation de génériques :
// 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