![]() |
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 |
Re: Record als Eigenschaft von sich selber
Er will sich einen Baum basteln.
Vielleicht sollte er eindimensional bleiben, vielleicht wäre eine zweite (dritte) Dimension ergänzt worden. Mit einem zweidimensionalen Baum kann man bspw. Menüs darstellen. |
Re: Record als Eigenschaft von sich selber
Baum-Strukturen würden sich nicht nur für Menüs eigenen:
TreeView, ListView,.... |
Re: Record als Eigenschaft von sich selber
War auch nur ein Beispiel. Geht für so alles Mögliche.
Ein eindimensionaler Baum würde sich auch als Liste, Queue, Stapel oder ähnliches eignen. Wofür man aber einen Baum mit drei oder mehr Dimensionen eignen würde, da geht mir die Fantasie aus. |
Re: Record als Eigenschaft von sich selber
Ah hab nicht so weit gedacht, dass speicher direkt beim Initialisieren der Record-Instanz reserviert wird. Dann ist auch klar, dass das nicht geht ;)
Und ja, es wird ein Baum für einen SceneGraph für Grafiken. |
Re: Record als Eigenschaft von sich selber
Na für soetwas empfehle ich doch die klassische n-fach verkettete Liste
Delphi-Quellcode:
wobei daten irgendeine Struktur sein kann incl. (Byte,Char,integer usw.)
Type
precord=^trecord; trecord= record next : precord; ... daten: tdaten; end; Gruß K-H |
Re: Record als Eigenschaft von sich selber
Jupp, so hab ich's auch letztendlich gelöst ;)
|
Re: Record als Eigenschaft von sich selber
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:08 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