Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
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);
}