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. xD

    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]")
    		{
    			// 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.


Anmelden zum Antworten