Problem mit der STL "Template Argument konnte nicht hergeleitet werden"



  • Hallo!
    Ich bekomme folgende Fehlermeldung:

    Fehler 23 error C2784: "bool std::operator <(const std::pair<_Ty1,_Ty2> &,const std::pair<_Ty1,_Ty2> &)": template-Argument für "const std::pair<_Ty1,_Ty2> &" konnte nicht von "const std::string" hergeleitet werden. in c:\programme\visual c++ express\vc\include\functional Zeile 143

    Was mich nur irritiert ist, dass die Fehlermeldung nicht aus meinem Code stammt sondern anscheind aus einer Include Datei, die mit der STL zu tun hat (siehe das fett markierte im Zitat). Fehlermeldung scheint ja was mit der STL zu tun haben- vielleicht helfen hier auch meine "STL Definitionen":

    map<string,HICON> m_hIconSmall;  
    map<string,HICON> m_hIconMedium; 
    map<string,HICON> m_hIconLarge;  
    map<string,string> m_sFileTypeDescription;  
    map<string,vector<LPITEMIDLIST>> m_vecFilePidls;  
    map<string,vector<string>> m_vecFileNames;
    

    Ich glaube z.T. falscher Gebrauch der Ungarischen Notation...aber das ist ja jetzt erst einmal egal 🙂
    EDIT: Ich habe ürbigens noch mehr solcher Fehlermeldungen, die entweder gleich sind oder in die selbe Richtung gehen



  • Versuchs mit:

    #include <string>
    


  • Technohead schrieb:

    ...
    Ich glaube z.T. falscher Gebrauch der Ungarischen Notation...

    Nun, das ist IMHO nicht das, was man unter "ungarischer Notation" versteht, sondern es geht um die spezielle Kennzeichung von Membervariablen.

    Gruß,

    Simon2.

    P.S.: Ich selbst verwende weder die eine noch die andere Notation .... 😉



  • David_pb schrieb:

    Versuchs mit:

    #include <string>
    

    Ich liebe dich- es funktioniert 😃 😃 Also keine Ahnung, ob ich das einfach immer überlesen habe, dass man auch noch string includen muss....aber irgendwie ist das echt eine ziemlich triviale Sache..... 🙄 Schönen Dank auf jeden Fall 🙂

    @Simon2: Ich meinte auch eher, dass z.B. bei "m_vecFilePidls" ein "vec" steht obwohl es sich ja genau genommen eher um eine Map handelt....aber u.N. ist sowieso irgendwie sone Sache, weil man nie so richtig weiss, was für ein Präfix man setzen soll, sobald es über den Bereich von Integer und Char Variablen hinaus geht (überspitzt gesagt) 😉



  • Technohead schrieb:

    Also keine Ahnung, ob ich das einfach immer überlesen habe, dass man auch noch string includen muss....aber irgendwie ist das echt eine ziemlich triviale Sache.....

    Eigentlich gibt es da nichts zu überlesen. Die STL besteht vollständig aus Templates, also Vorlagen, die erst bei Gebrauch übersetzt werden. Wenn Du jetzt z.B. eine Map mit Strings benutzt, wird Code erzeugt, der mit Strings arbeitet. Da aber <map> nur Vorlagen enthält, sich also der Existenz von Strings überhaupt nicht bewusst ist, musst Du, um eine Map von Strings zu benutzen, <map> und <string> includen.



  • Technohead schrieb:

    ...Ich meinte auch eher, dass z.B. bei "m_vecFilePidls" ein "vec" steht ...

    Ach so ! Da hast Du natürlich Recht !

    IMHO hat sich die ungar. Notation inzwischen schon längst als ungeeignet herausgestellt. Was ich aber mal sinnvoll fände, wäre eine einheitliche Bezeichnung der Mehrzahl ... denn durch diesen Mangel kommen oft "Containerkürzel" rein, die eben doch wieder den Typ assoziieren ... wo man einfach "mehrere von ..." ausdrücken möchte und das angehängte 's' oft zu unscheinbar ist.
    ...und wer schreibt schon:

    typedef vector<Lexikon> Lexika;
    

    😉

    Gruß,

    Simon2.


Anmelden zum Antworten