![]() |
Record als Eigenschaft von sich selber
Schwer dieses Thema zu beschreiben, ich zeig mal an einem Beispiel was ich erreichen möchte:
Delphi-Quellcode:
Ich möchte also, dass mein Record sich selbst als Unterlement besitzt. Geht das irgendwie?
type TAst = record
UnterAst : TAst; end; |
Re: Record als Eigenschaft von sich selber
Ich kenne es so, das man bei einem Record einen Zeiger auf den nächsten Record hat.
Delphi-Quellcode:
type
PAst = ^TAst; TAst = record UnterAst : PAst; end; end; |
Re: Record als Eigenschaft von sich selber
Danke das geht, dann wirds wohl ein Pointer... :)
|
Re: Record als Eigenschaft von sich selber
Zitat:
Vor allem, wenn UnterAst nicht das einzige Feld in TAst wäre. |
Re: Record als Eigenschaft von sich selber
Bei solchen Sachen würde ich dann auch eher zu Klassen tendieren, da diese da einfach mächtiger sind. Dort hast du auch einfach mehr Flexibilität.
|
Re: Record als Eigenschaft von sich selber
Grund: Der Record ist zu diesem Zeitpunkt (also innerhlab seiner eigenen Deklaration) noch nicht fertig.
Der Compiler weiß also noch nicht wie groß dieser mal wird und kann demnach die Position des nächsten Feldes nicht berechnen. Grund2: Dieses würde einen unendlichgroßen Record ergeben, welches einfach nicht möglich ist. > der Record wäre ja unendlich Mal in sich selber verschachtelt Bei Objekten geht das, da dort zum Zeitpunkt der Kompilierung die Größe des Instanzzeigers ja schon feststeht. Und da eine Klasse ein Zeiger ist, wird dieses auch nur einmal verschachtelt. |
Re: Record als Eigenschaft von sich selber
In Delphi muss bei solchen Strukturen in einer Klasse (wegen Grund 1) zudem eine Forward-Deklaration vorgenommen werden:
Delphi-Quellcode:
Schaut erstmal nicht wirklich intuitiv aus, daher sei's gesagt.
type
TFoo = class; TFoo = class(TBar) private FSubFoo: TFoo; public // bla end; |
Re: Record als Eigenschaft von sich selber
Zitat:
(aber schaden tut's zumindestens nichts) Das Problem liegt z.B. hier an der Tatsache, daß TFuu erst später deklariert wird und zu diesem Zeitpunkt also noch unbekannt ist.
Delphi-Quellcode:
type
TFuu = class; TFoo = class(TBier) FSubFuu: TFuu; end; TFuu = class(TBar) end; |
Re: Record als Eigenschaft von sich selber
Wa echt? Hui, dann hab ich das wohl mit 2 Klassen die sich gegenseitig referenzieren verdurmschelt. Scusi :)
|
Re: Record als Eigenschaft von sich selber
@MisterNiceGuy
Wozu soll das Gut sein? irgendwie reicht meine Phantasie nicht dafür aus. Gruß K-H |
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:27 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz