speichern von structs mit unterstructs



  • moin!

    ich habe mal wieder ein problem:

    angenommen ich habe ein ganz normales struct mit pointer:

    struct irgendeinstruct
    {
      int bData;
      int *data;
    }
    

    kann man dieses ja ganz leicht in ein file speichern und auch wieder lesen:

    //schreiben
    irgendeinstruct meinStruct;
    //struct mit daten füllen
    //...
    FILE *file=fopen("test.txt", "w+b");
    fwrite(&meinStruct, sizeof(irgendeinstruct), 1, file);
    fwrite(*meinstruct.data, bData, 1, file);
    
    //lesen
    irgendeinstruct meinStruct;
    FILE *file=fopen("test.txt", "w+b");
    fread(&meinstruct, sizeof(irgendeinstruct), 1, file);
    meinstruct.data=new int[bData/sizeof(int)];
    fread(*meinstruct.data, bData, 1, file);
    

    so, nun zu meinem problem:

    was ist wenn die struktur zB so aussieht:

    struct irgendeinstruct
    {
      int bData;
      int *data;
    }
    
    struct irgendeinanderesstruct
    {
      int bData;
      irgendeinstruct *strukturen;
    }
    

    wie soll man die 2. struktur (irgendeinandersstruct) (in ein file) speichern?

    EDIT:
    ups, hat ja eigentlich nichts mit c++ zu tun 🙄
    @mods: falls es stören sollte, bitte verschieben



  • Solange du den Inhalt des Structs kennst ist das doch kein Problem.
    Du speicherst eben zuerst das zweite, dann das erste (immer vom Container runter zum Inhalt).
    (einziges Problem ist die Implementierungsabhängigkeit der struct-Layouts im Speicher und damit auf der Platte, aber über das sehen wir mal hinweg)

    elegantere Methode:
    Jedes struct weiss am besten wie es sich selbst zu speichern und wieder zu lesen hat.
    Deshalb sollte es eine Methode spendiert bekommen, die genau das tut. (Stichwort: Serialisierung).
    Zum speichern von unter-structs wird nun einfach im richtigen Moment deren Speicher-Methode aufgerufen.


Anmelden zum Antworten