Sdílet prostřednictvím


Chyba kompilátoru C2910

'function' : nesmí být explicitně specializovaná.

Kompilátor zjistil pokus o explicitní specializaci funkce dvakrát.

Následující ukázka generuje 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 lze také vygenerovat, pokud se pokusíte explicitně specializovat člena, který není šablonou. To znamená, že se můžete explicitně specializovat pouze na šablonu funkce.

Následující ukázka generuje 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){}

Tato chyba se také vygeneruje v důsledku práce kompilátoru, která byla provedena v sadě Visual Studio .NET 2003:.

Kód bude platný ve verzích Visual Studio .NET 2003 a Visual Studio .NET sady Visual C++, odeberte template <>.

Následující ukázka generuje 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