Baum Serialisierung ...
-
Entschuldigt, dass ich nochmals nerve aber bisher habe ich keinen Erfolg gehabt.
Ich möchte mit VC++ MFC einen Baum serialisieren und deserialisieren. Folgender
Code:struct Knoten { int Eintrag; Knoten* links; Knoten* rechts };
class CBaum : CObject
{
DECLARE_SERIAL(CBaum)
Knoten* Wurzel;
void Einfügen(Knoten*& kn, int Wert); //Sortiert int's in den Baum bm1 ein.
void Durchlauf(Knoten* kn); // Gibt den Inhalt des sortierten Baumes aus.
}Aufruf.h ...
#include "Baum.h"
class CAufruf ...
CBaum* bm1;
CBaum* bm2;Aufruf.cpp ...
Konstruktor ...
bm1->Einfügen(bm1->Wurzel, 3);
bm1->Einfügen(bm1->Wurzel, 1);
bm1->Einfügen(bm1->Wurzel, 7);
bm1->Einfügen(bm1->Wurzel, 5);
bm1->Einfügen(bm1->Wurzel, 0);
bm1->Durchlauf(bm1->Wurzel); // Gibt 0 1 3 5 7 aus....
//Serialisierung
...LButtonDown(...
CFile ymfile("Dateiname", CFile::Create | CFile::Write);
CArchive ar(&myFile, CArchive::store);
bm1->Serialize(ar);
//Deserialisierung
...RButtondown(....
CFile ymfile("Dateiname", CFile::Read);
CArchive ar(&myFile, CArchive::load);
bm2->Serialize(ar);
bm2->Durchlauf(bm2->Wurzel);Hier gibt es keine Ausgabe, das heisst der Baum wurde nicht korrekt
De/Serialisiert. Weiss jemand Rat ?
-
Eine Richtigstellung:
Aufruf.cpp
Konstruktor ...
bm1 = new CBaum();
bm2 = new CBaum();
...Einfügen ...Konstruktor für CBaum:
Wurzel = NULL;//fehlte noch "
-
Ok! ich muss wohl bei CBaum die Serialize-Funktion überschreiben. Da dasselbe Programm bei CList<int>, mit AddTail anstelle von Einfügen, und einer Ausgabe-Funktion anstelle von Durchlauf, laüft, dachte ich irrtümlich da wäre keine Überschreibung notwendig. Nun aber konkret, wie sieht die Überschreibeung von Serialize bei CBaum aus, schliesslich sollten beim Deserialisieren die Zeiger wieder gerichtet werden. Genügt eine Tiefezuerst-Traversierung. Es wäre nett wenn Ihr mich dabei uterstützen könnt ! ( Vielleicht mit Code ) Und entschuldigt, dass ich dreimal hintereinander schreibe.