Udostępnij przez


Błąd kompilatora C2893

Nie można specjalizować szablonu funkcji "nazwa szablonu"

Uwagi

Kompilator nie może specjalizować szablonu funkcji. Może istnieć wiele przyczyn tego błędu.

Ogólnie rzecz biorąc, sposobem rozwiązania błędu C2893 jest przejrzenie podpisu funkcji i upewnienie się, że można utworzyć wystąpienie każdego typu.

Przykład

Występuje C2893, ponieważ fparametr szablonu jest wywoływany jako T, ale std::map<int,int> nie ma elementu członkowskiego std::map<int,int> (data_type nie można utworzyć wystąpienia za pomocą T::data_typeparametru T = std::map<int,int> .). Poniższy przykład generuje kod C2893.

// C2893.cpp
// compile with: /c /EHsc
#include <map>
using namespace std;
class MyClass {};

template<class T>
inline typename T::data_type
// try the following line instead
// inline typename  T::mapped_type
f(T const& p1, MyClass const& p2);

template<class T>
void bar(T const& p1) {
    MyClass r;
    f(p1,r);   // C2893
}

int main() {
   map<int,int> m;
   bar(m);
}