Udostępnij za pośrednictwem


Błąd kompilatora C2910

"function" : nie może być jawnie wyspecjalizowany

Kompilator wykrył próbę jawnego wyspecjalizowania funkcji dwa razy.

Poniższy przykład generuje kod 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 można również wygenerować, jeśli próbujesz jawnie specjalizować element członkowski, który nie jest szablonem. Oznacza to, że można jawnie specjalizować tylko szablon funkcji.

Poniższy przykład generuje kod 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){}

Ten błąd zostanie również wygenerowany w wyniku pracy kompilatora, która została wykonana w programie Visual Studio .NET 2003:.

W przypadku kodu będą prawidłowe w programach Visual Studio .NET 2003 i Visual Studio .NET visual C++, usuń element template <>.

Poniższy przykład generuje kod 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