編譯器錯誤 C2910
'function' : 無法明確特製化
編譯器偵測到嘗試明確特製化函式兩次。
下列範例會產生 C2910:
// C2910.cpp
// compile with: /c
template <class T>
struct S;
template <> struct S<int> { void f() {} };
template <> void S<int>::f() {} // C2910 delete this specialization
如果您嘗試明確特製化非範本成員,也可以產生 C2910。 也就是說,您只能明確特製化函式範本。
下列範例會產生 C2910:
// C2910b.cpp
// compile with: /c
template <class T> struct A {
A(T* p);
};
template <> struct A<void> {
A(void* p);
};
template <class T>
inline A<T>::A(T* p) {}
template <> A<void>::A(void* p){} // C2910
// try the following line instead
// A<void>::A(void* p){}
這個錯誤也會因為 Visual Studio .NET 2003:中完成的編譯器一致性工作而產生。
若為程式碼在 Visual Studio .NET 2003 和 Visual Studio .NET 版本的 Visual C++ 中有效,請移除 template <>
。
下列範例會產生 C2910:
// C2910c.cpp
// compile with: /c
template <class T> class A {
void f();
};
template <> class A<int> {
void f();
};
template <> void A<int>::f() {} // C2910
// try the following line instead
// void A<int>::f(){} // OK