Hallo Hagen
Vielen Dank für Dein tolles (kurzes und sehr gut nachvollziehbares) Beispiel und die detaillierte Beschreibung!! Super!
Ich denke, nun ist mir klar, wie ich eine TListe speicher. Wie schreibe ich aber das Objekt Kante in ein Stream. Sind ja nur die Pointer auf die Punkte gespeichert, die in einer anderen Liste gespeichert sind.
Delphi-Quellcode:
TGraph = class
PunkteListe:TList;
KantenList:TList;
constructor Create();
end;
Procedure TPoint.Store(s:TStream)
Begin
S.Write(x, SizeOf(x));
S.Write(y, SizeOf(y));
End;
Procedure TPoint.Load(s:TStream)
Begin
S.Read(x, SizeOf(x));
S.Read(y, SizeOf(y));
End;
Procedure TPoint.Load(s:TStream)
Begin
S.Read(x, SizeOf(x));
S.Read(y, SizeOf(y));
End;
Procedure TKante.Store(s:TStream)
Begin
S.Write( ...schreibe Referenz von P1 in das Stream???
S.Write( ...schreibe Referenz von P2 in das Stream???
End;
Procedure TKante.Store(s:TStream)
Begin
S.Read( ...lies Referenz von P1 in das Stream???
S.Read( ...lies Referenz von P2 in das Stream???
End;
constructor TGraph.Create();
var P1,P2:TPoint;
K:TKante;
Begin
PunkteListe:=TList.Create;
// erzeuge 10 zufällige Punkte
for i:=0 TO 9 Do
Begin
P:=TPoint.create(Random(100),Random(100));
PunkteListe.Add(p);
End;
// Erzeuge 4 zufällige Kanten
For j:=0 TO 4 Do
Begin
Kantenliste:=TKante.Create(l[Random(9)],L[Random(9));
End;
End;
Wenn ich Deinen Code compiliere, dann erhalte ich ein paar Meldungen
Delphi-Quellcode:
...
Instance := (GetClass(ReadClassName) as TMyBaseClass).Create; //[Fehler] uHagen.pas(50): E2015 Operator ist auf diesen Operandentyp nicht anwendbar
...
with List[I] as TMyBaseClass do // Operator nicht anwendbar
SaveToStream(Stream); // wennn ich richtig verstanden habe, dann werden hier z.B. die Koordinaten für einen Punkt gespeichert. Wie speichere ich aber bitte die Kantenliste?
Vielen Dank nochmals und beste Grüsse
Geri