map nach Füllfunktion leer
-
Guten Morgen,
Seltsam, dass ich nach einer halben Stunde des Suchens immer noch nichts
zu diesem Thema finden konnte. Ich mach wohl was falsch. xDvoid LoadItems(string itemFile) { // InputFileStream öffnen ifstream iStr(itemFile.c_str()); GameItem tmpItem; string tmpStr; RECT tmpSrcRect; // Solange Ende der Datei nicht erreicht... while(!iStr.eof()) { // [item]-Zeile lesen getline(iStr, tmpStr); // Namenszeile lesen getline(iStr, tmpStr); tmpItem.SetName(tmpStr); // SrcRect-Position lesen getline(iStr, tmpStr); sscanf_s(tmpStr.c_str(), "%i,%i,%i,%i", &tmpSrcRect.left, &tmpSrcRect.top, &tmpSrcRect.right, &tmpSrcRect.bottom); // Erste action oder End-Tag lesen getline(iStr, tmpStr); while(tmpStr != "[/item]") { // Actions zum Item hinzufügen tmpItem.AddAction(tmpStr); getline(iStr, tmpStr); } // Item zur item-map hinzufügen items[tmpItem.GetName()] = tmpItem; } // Stream schliessen iStr.close(); }Folgendes: Diese Funktion liest Daten aus einem Itemfile
und speichert die ganzen Items in einer map<string, GameItem>.Seltsamerweise hat das gestern noch wunderbar geklappt, aber
jetzt (ohne Änderung an diesem Code) nicht mehr.
Nach dem Ende der Funktion ist die map wieder leer.
Ist das, weil die in den Funktion erzeugt GameItems beim
Ende gelöscht werden?
Wenn ja: Wie könnte ich das Problem lösen?
Ist alles global, auch die map.
-
void LoadItems(string itemFile) { // InputFileStream öffnen ifstream iStr(itemFile.c_str()); GameItem tmpItem; string tmpStr; RECT tmpSrcRect; // Solange Ende der Datei nicht erreicht... while(!iStr.eof()) { // [item]-Zeile lesen getline(iStr, tmpStr); // Namenszeile lesen getline(iStr, tmpStr); tmpItem.SetName(tmpStr); // SrcRect-Position lesen getline(iStr, tmpStr); sscanf_s(tmpStr.c_str(), "%i,%i,%i,%i", &tmpSrcRect.left, &tmpSrcRect.top, &tmpSrcRect.right, &tmpSrcRect.bottom); // Erste action oder End-Tag lesen getline(iStr, tmpStr); while(tmpStr != "[item]") // / rausgenommen, weil sonst cppp-tags nicht funzen { // Actions zum Item hinzufügen tmpItem.AddAction(tmpStr); getline(iStr, tmpStr); } // Item zur item-map hinzufügen items[tmpItem.GetName()] = tmpItem; } // Stream schliessen iStr.close(); }Geh mal mit dem Debugger durch und schaue, ob er dir die Daten richtig in die map pusht.
Wenn items eine globale Variable ist, dann sollte das nach dem Aufruf der Funktion eigentlich die Daten noch da sein. (prinzipiell).
-
Habe ich... Am Ende der Funktion ist die map gefüllt.
Alles wunderbar... Nach dem Ende: leer.
Eben müsste sie gefüllt sein, wenn sie global ist.
-
Ok, hat sich erledigt... War ein Fehler in der Reihenfolge.
Sorry. -.- Verliere da ab und an mal die Übersicht.
Trotzdem vielen Dank.
-
Wenn du ordentlich einrücken würdest hättest du etwas mehr Übersicht.
-
So viel Erfahrung habe ich dann auch noch.

Ist nur da vom Kopieren so seltsam eingerückt.