Delen via


Compilerfout C3203

'type': niet-gespecialiseerde klassesjabloon of algemeen kan niet worden gebruikt als sjabloon of algemeen argument voor sjabloon of algemene parameter 'param', verwacht een echt type

Opmerkingen

U hebt een ongeldig argument doorgegeven aan een klassesjabloon of algemeen. De klassesjabloon of generiek verwacht een type als parameter.

Deze fout kan worden gegenereerd als gevolg van werk aan compilerconformiteit dat is uitgevoerd voor Visual Studio 2005: een niet-gespecialiseerde klassesjabloon kan niet worden gebruikt als sjabloonargument in een basisklasselijst. Als u C3203 wilt oplossen, voegt u expliciet de parameter(s) voor het sjabloontype toe aan de naam van de sjabloonklasse wanneer u deze gebruikt als sjabloonparameter in een basisklasselijst.

Voorbeelden

In het volgende voorbeeld wordt C3203 gegenereerd:

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

In het volgende voorbeeld wordt C3203 gegenereerd en ziet u hoe u dit kunt oplossen:

// 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 kan ook optreden bij het gebruik van generics:

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