[C/C++] Speichern/Laden Klassen

Dieses Thema im Forum "Programmierung & Entwicklung" wurde erstellt von 4nd1, 30. Mai 2008 .

Schlagworte:
Status des Themas:
Es sind keine weiteren Antworten möglich.
  1. 30. Mai 2008
    Speichern/Laden Klassen

    Hallo,

    ich habe ein Problem und zwar möchte ich eine Klasse welche mit einem Array intialisiert worden ist, binär speichern/laden. Hab jedoch das Problem, dass ich immer nur falsche Werte beim Laden zurückbekomme bzw das Programm abstürzt.
    Wäre sehr dankbar für eure Hilfe!!
    Vielleicht kennt ihr ja noch andere Möglichkeiten.

    Habe die Schleifen mal aus dem Code entfernt, welche die Klasse mehrmals instanzieren.
    Code:
    #include <iostream>
    #include <fstream>
    using namespace std;
    
    class Eintrag
    {
     public:
    char adresse[40];
    int zeichen;
    int interval;
    };
    
    int main()
    {
     Eintrag * first[10];
     int z=0;
    
     int wahl;
     cout << "1 -> Speichern, 2 -> Laden"<<endl;
     cin >> wahl;
    
     //Speichern
     if(wahl == 1)
     {
     fstream File("Testdatei", ios::out|ios::binary);
     if (!File)
     {
     cerr << "Fehler beim Öffnen der Datei!" << endl;
     return 1;
     }
    
     first[z] = new Eintrag();
     first[z]->zeichen = 1111;
     cout << "interval: ";
     cin >> first[z]->interval;
     cout << endl;
     cout << "adresse: ";
     cin >> first[z]->adresse;
    
    
     File.write((const char*)&first, sizeof(first));
     File.close();
    
     // Datei schließen
     system("Pause");
    }
    //Laden...
    if(wahl == 2){
     fstream File2("Testdatei", ios::in|ios::binary);
    
     //File2.open("Testdatei", ios::in|ios::binary);
     if (!File2)
     {
     cerr << "Fehler beim Schreiben der Datei!" << endl;
     return 1;
     }
    
    
     File2.read((char*)&first, sizeof(first));
    
     cout << "Lable2: " << first[z]->adresse << endl;
     cout << "Lable2: " << first[z]->zeichen << endl;
     cout << "Lable2: " << first[z]->interval << endl;
    
     File2.close();
     system("Pause");
     return 0;
     }
    
    }
    
     
  2. 2. Juni 2008
    AW: Speichern/Laden Klassen

    Ich habs jetzt mal kurz überflogen und da ist mir aufgeflogen, dass du in der laden funktion deinen daten sonstwo hin schreibst.

    Code:
    File2.read((char*)&first, sizeof(first)); 
    first ist en array von zeigern. Wo sollen deine Daten hin? 3 strings passen net in eine 32bit variable oO

    Du hast allgemein ein bisschen deine Speicher Logik verplant. ist aber normal wenn man so etwas zum ersten mal macht. Geht vielen so.

    Außerdem hier:
    Code:
    File.write((const char*)&first, sizeof(first));
    
    first ist ja ein array von zeigern also ist first der zeiger auf den ersten zeiger. Also haben wir schon einen doppelzeiger. Jetzt holst du davon nochmal die adresse. Fürht zu nem dreifachzeiger wenn ich mich nicht irre. Die Funktion braucht aber einen einfachen zeiger. also * statt & oder first[0] und sizeof(first) ist ja auch falsch da du nicht die adressen speichern willst.
    Mach dir lieber ein Array aus Einträgen und nicht aus zeigern auf Einträgen dann wird das net so kompliziert.

    mfg tobZel
     
  3. 3. Juni 2008
    AW: Speichern/Laden Klassen

    Danke,
    habs jetzt gelöst in dem ich die Werte einzeln speicher und schon klappts
    Bw is raus^^
    kann geclosed werden
     
  4. 3. Juni 2008
    AW: Speichern/Laden Klassen

    ~closed~
     
  5. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.