컴파일러 오류 C3203
업데이트: 2007년 11월
오류 메시지
'type' : 특수화되지 않은 클래스 형식은(는) 형식 매개 변수 'param'에 대한 형식 인수로 사용할 수 없습니다. 실제 형식이 필요합니다.
'type' : unspecialized class type can't be used as a type argument for type parameter 'param', expected a real type
클래스 템플릿 또는 제네릭에 잘못된 인수를 전달했습니다. 클래스 템플릿 또는 제네릭에서는 형식을 매개 변수로 간주합니다.
이 오류는 Visual C++ 2005에 대해 수행된 즉, 특수화되지 않은 클래스 템플릿은 기본 클래스 목록에서 템플릿 인수로 사용할 수 없다는 컴파일러 규칙의 결과에 따라 발생할 수 있습니다. C3203을 해결하려면 템플릿 형식 매개 변수를 기본 클래스 목록에서 템플릿 매개 변수로 사용할 때 템플릿 클래스 이름에 이 매개 변수를 명시적으로 추가해야 합니다. 자세한 내용은 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;
}
다음 샘플에서는 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;
제네릭을 사용하는 경우에도 C3203이 발생할 수 있습니다.
// 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