Was will mir die Fehlermeldung sagen??



  • Hi,

    ich hab eine Template Funktion bei der irgendwas schief geht, nur komm ich mit der Fehlermeldung nicht ganz zurecht 😞 🙄

    template<class T, class U> void insertToMap(CString Parameter, CString Value, map<T, U> const& Map) 
    { 
    	Map.insert(make_pair(Parameter,Value));
    }
    

    data.h(37) : error C2663: 'insert' : 3 overloads have no legal conversion for 'this' pointer

    Bevor ich ein Template daraus gemacht habe, sah der Code so aus:

    void Data::insertToCSCSMap(CString Parameter, CString Value, map<CString, CString> &Map)
    {
    	Map.insert(make_pair(Parameter,Value));
    }
    

    Da hat noch alles funktioniert, ich blicks mal wieder nicht 🙄

    Legolas



  • Wozu ist denn das const in der ersten Version gedacht?



  • Ahh shit, c&p Fehler ...

    Keine Ahnung ob Du mir dadurch auf die Sprünge helfen wolltest aber das war das Prob 😉

    Gracias



  • Wollte ich 😉 Nur wenn ich gleich die Katze aus dem Sack lasse, wär's doch langweilig 😃



  • Da hat noch alles funktioniert, ich blicks mal wieder nicht

    Deine Map ist als const deklariert. Die drei insert-Methoden von map sind aber alle nicht const, da sie natürlich die Map verändern.

    Du hast also eine const-Map, brauchst aber eine nicht-const Map. Da es zwischen diesen beiden keine implizite Konvertierung gibt, beschwert sich der Compiler.



  • Ok. Wer 15 Minuten für drei Sätze braucht, der kommt natürlich *viel* zu spät 😃



  • @tag
    echt?? Könnt ich nicht behaupten ... 😃 😃

    @Hume
    Jepp, habs nach dem ersten Hinweis schon geschnallt, trotzdem Gracias



  • Wo ist eigentlich der Sinn darin, eine frei parametrierte map zu haben, in die dann immer (CString, CString)-Paare eingefügt werden?



  • Wo ist eigentlich der Sinn darin, eine frei parametrierte map zu haben, in die dann immer (CString, CString)-Paare eingefügt werden?

    Die Frage habe ich mir auch schon gestellt. CString hat eine implizte Konveriertung nach char*. D.h. würde er in der Funktion über den value_type der map einfügen, könnte er auch eine map<char*, char*> übergeben. Ob das sinnvoll wäre, sei mal dahingestellt.

    So sehe ich auf jeden Fall keine Möglichkeit für Polymporphie. Aber vielleicht bin ich auch nur zu blind 🙂



  • Ich hoffe, dass es Sinn macht 🙄

    Ich habe mehrere Maps, <int, CString>, <CString, CString>, <CString, int> und bevor ich jetzt für jede eine eigene getSize Methode schreibe hab ich mir gedacht, dass es mit der template Function doch ganz nett wäre ... oder irre ich mich da??
    Für den Fall müssen "Parameter", "Value" natürlich auch noch variabel gemacht werden ... 😉

    Falls es nicht der Fall sein soll, dann nur her mit besseren Ideen ...

    Ausserdem hab ich noch nie etwas mit template Funktionen gemacht und wollte es mal probieren 😃


Anmelden zum Antworten