Teilen über


Compilerfehler C2893

Fehler beim Spezialisieren der Funktionsvorlage "Vorlagenname"

Bemerkungen

Der Compiler konnte nicht auf eine Funktionsvorlage spezialisiert werden. Dieser Fehler kann vielfältige Ursachen haben.

Im Allgemeinen besteht die Möglichkeit zum Beheben eines C2893-Fehlers darin, die Signatur der Funktion zu überprüfen und sicherzustellen, dass Sie jeden Typ instanziieren können.

Beispiel

C2893 tritt auf, da fder Vorlagenparameter T abgeleitet ist std::map<int,int>, aber std::map<int,int> kein Element data_type aufweist (T::data_type kann nicht mit T = std::map<int,int>.) instanziiert werden. Im folgenden Beispiel wird C2893 generiert.

// 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);
}