Partilhar via


Compilador erro C2910

Mensagem de erro

'função': não pode ser explicitamente especializado

O compilador detectou uma tentativa de specialize explicitamente uma função duas vezes.

O exemplo a seguir gera 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 também podem ser gerados, se você tentar specialize explicitamente um membro de modelo não.Ou seja, você pode apenas explicitamente specialize um modelo de função.

O exemplo a seguir gera 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){}

Este erro também será gerado sistema autônomo resultado do trabalho de conformidade de compilador que foi concluído no Visual Studio .NET 2003:.

Para o código será válido nas versões do Visual C++, remover Visual Studio .NET 2003 e do Visual Studio .NETtemplate <>.

See Resumo das alterações de quebras de time de compilar para obter mais informações.

O exemplo a seguir gera 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