컴파일러 오류 C3856
'type': 클래스가 클래스 형식이 아닙니다.
이 오류의 가장 일반적인 원인은 정의 지점에 선언 시점보다 더 많은 제네릭 또는 템플릿 매개 변수 목록이 있는 경우입니다.
다음 샘플에서는 C3856을 생성합니다.
// C3856.cpp
template <class T>
struct S {
template <class T1>
struct S1;
void f();
};
template <class T> // C3856
template <class T1>
template <class T2> // extra template parameter list in definition
struct S<T>::S1{};
해결 방법:
// C3856b.cpp
// compile with: /c
template <class T>
struct S {
template <class T1>
struct S1;
void f();
};
template <class T>
template <class T1>
struct S<T>::S1{};
C3856은 제네릭을 사용할 때도 발생할 수 있습니다.
// C3856c.cpp
// compile with: /clr
generic <class T>
ref struct GS {
generic <class U>
ref struct GS2;
};
generic <class T>
generic <class U>
generic <class V>
ref struct GS<T>::GS2 {}; // C3856
해결 방법:
// C3856d.cpp
// compile with: /clr /c
generic <class T>
ref struct GS {
generic <class U>
ref struct GS2;
};
generic <class T>
generic <class U>
ref struct GS<T>::GS2 {};