Sdílet prostřednictvím


Chyba kompilátoru C2893

Nepodařilo se specializovat šablonu funkce "název šablony"

Poznámky

Kompilátor se nepodařilo specializovat šablonu funkce. Tato chyba může mít celou řadu příčin.

Obecně platí, že způsob, jak vyřešit chybu C2893, je zkontrolovat podpis funkce a ujistit se, že můžete vytvořit instanci každého typu.

Příklad

K C2893 dochází, protože fparametr T šablony je vyvolána std::map<int,int>, ale std::map<int,int> nemá žádný člen data_type (T::data_type nelze vytvořit instanci s T = std::map<int,int>.). Následující příklad vygeneruje 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);
}