Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - Eigenen Typ in Klasse verwenden
K_wave - Do 08.05.08 12:24
Titel: Eigenen Typ in Klasse verwenden
Hallo zusammen!
ich habe eine Frage zum Deklarieren von Typen:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7:
| TCustomTreeObjectArray=array of TCustomTreeObject; TCustomTreeObject=class(TObject) private myParent:TCustomTreeObject; public function GetChilds:TCustomTreeObjectArray; end; |
Definiere ich TCustomTreeObjectArray NACH TCustomTreeObject dann kennt die Klasse TCustomTreeObject den Typen TCustomTreeObjectArray nicht.
Definiere ich TCustomTreeObjectArray VOR TCustomTreeObject dann kennt die Definition von TCustomTreeObjectArray den Typen TCustomTreeObject nicht.
Ich könnte z.B. TCustomTreeObjectArray als array of TObject deklarieren, ist aber unschön da ich dann jedes mal wieder auf TCustomTreeObject casten müsste.
Wie kann ich dieses Problem Lösen? Gibt es in Delphi eine Möglichkeit erweiterte Prototypen zu definieren?
Vielen Dank
Grüsse
JayEff - Do 08.05.08 12:29
Dazu gibts die Foreward deklaration. In Ada gehts so:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7:
| type X; type Y is record a : Integer; b : X; end record;
type X is access Y; |
Aber das is nich so einfach in delphi portierbar, such einfach mal nach "Forward deklaration" oder nur "forward"
;)
Der Sinn dahinter ist, dem Compiler erstmal zu sagen: "Hier, den typen X, den gibt's. Wie der aussieht sag ich dir später."
Edit: Habe was gefunden: Schreib mal folgendes:
Delphi-Quelltext
1: 2: 3: 4: 5:
| Type TMyArray; forward; Type TMyClass=class(TObject) x : TMyArray; end; Type TMyArray = array of TMyClass |
...oder sowas. Verdammt! Ich bin durch ada voll aus der Delphi Syndax :motz:
mkinzler - Do 08.05.08 12:32
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| TCustomTreeObject=class;
TCustomTreeObjectArray=array of TCustomTreeObject;
TCustomTreeObject=class(TObject) private myParent:TCustomTreeObject; public function GetChilds:TCustomTreeObjectArray; end; |
JayEff - Do 08.05.08 12:36
Ok, so wirds klappen, schön copy&paste fähig, prima, muss man garnich mehr denken :motz:
Lossy eX - Do 08.05.08 13:33
Manchmal wären 1-2 Zeilen Erklärung gar nicht mal so schlecht. Dann hätte man velleicht sogar die Möglichkeit es zu verstehen und beim nächsten Mal nicht wieder fragen zu müssen....
Wie JayEff aber schon sagte schimpft sich das Forwarddeklarationen und die sagen Delphi lediglich da gibt es eine Klasse und die hat folgenden Namen. ABER so wie JayEff das geschrieben hat geht es leider nicht. Die Forwarddeklarationen sind nur innerhalb EINES Typeblockes gültig. Das heißt diese Typen die du deklarierst dürfen nicht alle ein neues type haben sondern müssen alle unterhalb eines Types befinden.
geht
1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| type TClass1 = class;
TClass2 = class C: TClass1; end;
TClass1 = class C: TClass2; end; |
geht nicht
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| type TClass1 = class;
type TClass2 = class C: TClass1; end;
type TClass1 = class C: TClass2; end; |
K_wave - Do 08.05.08 13:39
Vielen Dank für die zahlreichen Antworten! so funtktioniert es ;-)
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!