Einzelnen Beitrag anzeigen

Geri

Registriert seit: 23. Nov 2004
Ort: Feldkirch
47 Beiträge
 
Delphi 2005 Personal
 
#9

Re: Referzen in ein Stream speichern

  Alt 14. Sep 2006, 22:17
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
Gerhard
  Mit Zitat antworten Zitat