map mit new erzeugen und insert werte
-
ich habe eine map mit folgender structur
.h
typedef std::map<CString,int> myType; std::map<CString, myType *> m;
jetzt will ich in einer methode
.cpp
myType *temp= new myType; temp.insert(std::make_pair(_key, _value )); // hier die map = value --> fehler m[_name] = temp; // hier der CString = key
Fehlermeldung: linker teil von insert muss eine klasse/struct/union sein
wie soll ich es sonst machen?
dann muss ich im dekonstructor die map durchgehen, schauen ob es zum key einen value gibt und wenn ja dann diesen deleten? habt ihr einen tipp?
-
temp->insert // -> statt . war nötig
wie mach ich das mit den deletes jetzt?
-
wie lösche ich einen key?
std::map<CString,myType*>::iterator p2; // iter. erzeugen p2 = m.find(name); // wert suchen if( p2 != m.end() ){ // wenn gefunden, dann, sonst nichts m.erase(p); // geht nicht, warum nicht? //müsste ich nicht zuerst schauen ob es key gibt die mit new erzeugt werden, wenn ja wie, und wie lösche ich diese dann? }
-
Morgen,
was heisst "geht nicht"? Gibt es eine Fehlermeldung vom Compiler? Stuertzt das
Programm ab? Faehrst du Fahrrad oder laeufst du lieber? Hab meine Glaskugel leider
daheim gelassen.Tipp:
p2->first == dein name
p2->second == myType*
nachdem du einen iterator geloescht hast, ist dieser unglueltig. Schau dir mal
an, was die erase-Funktion als Rueckgabewert liefert.mfg
v R
-
1. einer der sich sehr gut auskennt, weiss warum es nicht geht und braucht keine fehlermeldung
2. ich hab doch gesagt, dass ich mit new speicher angefordert habe
3. d.h. ich kann nicht einfach earse machen!!!!!
4. meine lösung
//... std::map<CString,myType*>::iterator p2; p2 = m.find(name); if( p2 != m.end() ){ p2->second->clear(); delete p2->second; // <------ important sectionKeysColor_.erase(p2); }
ceckst jetzt warum das so einfach nicht geht?? danke