Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Record ist nicht vollständig definiert (https://www.delphipraxis.net/77840-record-ist-nicht-vollstaendig-definiert.html)

gsh 25. Sep 2006 16:47


Record ist nicht vollständig definiert
 
Hi DPler

Ich habe ein Problem mit dem Code hier:
Delphi-Quellcode:
TAllClientsRecord = record
  NodeName : string;
  Childs : array of TAllClientsRecord; //<-- genau hier
end;
bekomm ich folgende Fehlermeldung:
Zitat:

[Pascal Fehler] U_Haupt.pas(104): E2086 Typ 'TAllClientsRecord' ist nicht vollständig definiert
und ja es ist mir klar das Childs auf sich selber weisst. Ich will nämlich so eine art TreeView system und somit das das Record Childs haben kann die wieder Childs haben können usw.

SirThornberry 25. Sep 2006 16:55

Re: Record ist nicht vollständig definiert
 
Dir ist aber schon klar das es eine Recursion wäre wenn das Ginge. Du würdest damit also unendlich viel Speicher benötigen.
Denn deine Struktur enthält sich selbst welche widerum sich selbst enhält welche widerum sich selbst enthält.... Da es sich um ein dynamischen Record handelt ist das natürlich nicht der Fall (aber so schlau scheint der Compiler bei Records nicht zu sein)
Du musst an der Stelle mit Pointern arbeiten (typisierte Pointer). Und wenn du dann wirklich ein Unteritem benötigst musst du den Speicher anfordern.

Delphi-Quellcode:
PAllClientsRecord = ^TAllClientsRecord;
TAllClientsRecord = record
  NodeName : string;
  Childs : array of PAllClientsRecord; //<-- genau hier
end;
Bei Klassen geht das mit dem verwenden in sich selbst weil KlassenInstanzen nur Pointer sind.

gsh 25. Sep 2006 17:05

Re: Record ist nicht vollständig definiert
 
oh danke des hab ich nicht bedacht
ich werds gleich mal ausprobieren :coder:

marabu 25. Sep 2006 18:34

Re: Record ist nicht vollständig definiert
 
Hi Alex,

wie wäre es mit Children anstatt von Childs?

Freundliche Grüße vom marabu

gsh 25. Sep 2006 21:12

Re: Record ist nicht vollständig definiert
 
ja ich weiss des die mehrzahl von child children ist aber es war am Anfang ein Child und wenn man andere Programier technische Probleme hat dann schreibt man einfach ein s dazu ohne nachzudenken. Aber egal

Dax 25. Sep 2006 21:13

Re: Record ist nicht vollständig definiert
 
Um mal SirTs "dreckige" Pointerlösung zu umgehen: wenn du sowieso einen Baum bastelst, warum nimmst du nicht gleich Klassen und Listen? :gruebel:

SirThornberry 25. Sep 2006 21:17

Re: Record ist nicht vollständig definiert
 
Zitat:

Zitat von Dax
Um mal SirTs "dreckige" Pointerlösung zu umgehen: wenn du sowieso einen Baum bastelst, warum nimmst du nicht gleich Klassen und Listen? :gruebel:

*zustimm* Ich wollte mit der Pointerlösung nur ausdrücken das es nicht anders geht als mit Pointern (Klassen machen das ja auch so). Bei klassen hat man den Vorteil das man Methoden ins Destroy etc. werfen kann welche dann für das aufräumen sorgen.

gsh 25. Sep 2006 21:32

Re: Record ist nicht vollständig definiert
 
hmmm ich hab nur noch nichts mit klassen gemacht.
Muss ich dann da für jeden Child eine eigene Klasse erstellen?

SirThornberry 25. Sep 2006 21:35

Re: Record ist nicht vollständig definiert
 
für jedes Child eine eigene Klasseninstanz. Bei einem Record würdest du es ja genau so machen. Für jedes Child ein Record in deinem Array. Vorteil bei der Klasse ist das du im Destroy einfach die Childs frei geben kannst, diese geben wiederum in ihrem destory ihre childs frei und so weiter. Es ist also bedeutend bequemer und vor allem übersichtlicher.

gsh 25. Sep 2006 21:48

Re: Record ist nicht vollständig definiert
 
hmm ja schon aber wie mach ich des am besten des es sozusagen unendlich tief hineingehen kann?


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:33 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz