Problem beim Laden und anschließenden Zuweisen von Variablen



  • Hallo,

    ich hab ein Problem und komm einfach nicht weiter.

    Ich speichere eine Instanz per "outstream" in einer Datei ab. Die Klasse von der die Instanz ist wurde nur zum Speichern angelegt. In ihr befinden sich nur Zeiger auf die Originalvariablen einer anderen Klasse. Diese andere Klasse besitz einen Konstruktor.

    Wenn ich jetzt allerdings die Instanz aus der Datei per "ifstream" einlese und wieder den Zeigern oder den Originalvariablen zuweisen will, so klappt dies nicht. Die Varaiblen erhalten nur die Werte des Konstruktors.

    Was mache ich dauernd falsch ? :headscratch:



  • Code? Les was über Serialisierung.

    Gruß



  • Kennst du vielleicht noch ein gut verständliches Tutorial, in dem Serialisierung behandelt wird?



  • Ich Vermute du speicherst etwa so:

    struct Speicher
    {
       Speicher() { mem = new char[1024]; }
       ~Speicher() { delete[] mem; }
       char* mem;
    };
    
    Speicher speicher;
    file.write(&speicher, sizeof(Speicher));
    

    Das geht natürlich nicht, wenn du den Zeiger wieder lädst gibts wohl nen Segmention Fault, weil du von der Stelle auf die der Zeiger damals gezeigt hast nicht mehr lesen/schreiben darfst. Der Inhalt hat sich wahrscheinlich auch schon geändert!

    ostream& operator<< (ostream& lh, Speicher const& rh)
    {
        lh << rh.mem;
    }
    
    istream& operator>> (istream& lh, Speicher& rh)
    {
        lh >> rh.mem;
    }
    
    Speicher speicher;
    file << speicher;
    file >> speicher;
    

    Gruß



  • Nein,

    ich speichere per ofstream/ifstream

    #include <fstream>
    
    using namespace std;
    
    int main()
    {
    hero player; //hero = eine Klasse
    
    ofstream output ("Spielstand.ppp", ios::binary);
    output.write ((char*) &player, sizeof (player));
    output.close();
    /*Ifstream wird bei mir aufgerufen nachdem man das Spiel neu startet und fortfahren anwählt (Sinn: alte Charahterwerte laden um dann weiterspielen zu können)*/
    
    ifstream input("Spielstand.ppp" ios::binary);
    input.read((char*) &player, sizeof (player));
    input.close();
    }
    

    Da in der Klasse hero ein Konstruktor ist wird dieser nach dem Laden automatisch aufgerufen und meine Variablen aus dieser Klasse erhalten die Konstruktorwerte anststt der gespeicherten. 😞

    Was kann ich dagegen tun?


Anmelden zum Antworten