Freigeben über


Compilerfehler C3203

Aktualisiert: November 2007

Fehlermeldung

'Typ': Nicht spezialisierter Klassentyp kann nicht als Typargument für Typparameter 'param' verwendet werden, es wird ein realer Typ erwartet.
'type' : unspecialized class type can't be used as a type argument for type parameter 'param', expected a real type

An eine Klassenvorlage oder ein Generikum wurde ein ungültiges Argument übergeben. Die Klassenvorlage oder das Generikum erwartet einen Typ als Parameter.

Dieser Fehler kann infolge einer Verbesserung der Compilerkonformität für Visual C++ 2005 ausgegeben werden: Eine nicht spezialisierte Klassenvorlage kann in einer Basisklassenliste nicht als Vorlagenargument verwendet werden. Um den Fehler C3203 zu beheben, fügen Sie zu dem Vorlageklassennamen den/die Vorlagentypparameter explizit hinzu, wenn Sie die Vorlagenklasse in einer Basisklassenliste als Vorlagenparameter verwenden. Weitere Informationen finden Sie unter Wichtige Änderungen im Visual C++ 2005-Compiler.

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

Im folgenden Beispiel wird C3203 generiert:

// 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 kann auch auftreten, wenn Generika verwendet werden:

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