編譯器錯誤 C3203
'type':特製化的類別樣板或泛型,無法做為樣板或泛型參數 'param' 的樣板或泛型引數,必須是實數類型
傳遞至類別樣板或泛型的引數無效。 類別樣板或泛型預期將類型做為參數。
此錯誤可能是因為針對 Visual Studio 2005 完成的編譯程式一致性工作而產生:在基類清單中,無法使用非特定類別範本做為範本自變數。 若要解決 C3203,必須在將它做為基底類別清單中的樣板參數時,將樣板類型參數明確加入至樣板類別名稱。
// 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