![]() |
Delphi-Version: 7
Reihenfolge in Type-Deklaration
Hallo DP,
folgendes Problem:
Delphi-Quellcode:
Wie bewerkstellige ich so etwas ? Denn eigentlich müsste die Liste vor TNode deklariert werden damit TNode die Liste kennt, aber dann würde die Liste TNode noch nicht kennen :pale:
type
TNode = class( TObject ) private Edges: TNodeList; [..] end; TNodeList = class( TObjectList ) protected function getItem(index: Integer): TNode; [..] end; Vermutlich verkompliziere ich das wieder unnötig, vielleicht kann mir dennoch jemand auf die Sprünge helfen :roll: MfG |
AW: Reihenfolge in Type-Deklaration
Zitat:
Delphi-Quellcode:
type
TNodeList = class; //<------------ TNode = class( TObject ) private Edges: TNodeList; [..] end; TNodeList = class( TObjectList ) protected function getItem(index: Integer): TNode; [..] end; |
AW: Reihenfolge in Type-Deklaration
Zitat:
|
AW: Reihenfolge in Type-Deklaration
Man muß nur Einiges beachten.
Es geht nur mit Objekten, bzw. Zeigertypen (Interfaces, Pointer usw.) Records gehen nicht, da dort deren Größe sonst noch nicht verfügbar ist. Und das Ganze muß in einem Type-Block stehen, ohne Unterbrechung.
Delphi-Quellcode:
type
TMyClass = class; // die Forwad-Deklaration PMyRecordForward = ^TMyRecord; TMyRecord = record // oder object; ... MyRec: TMyRecord; // geht nicht NextRec: PMyRecord; // geht PrevRec: ^TMyRecord; // geht auch MyObj: TMyClass; // geht, da per Forward deklariert ... end; PMyRecord = ^TMyRecord; TMyClass = class ... MyObj: TMyClass; // geht, selbst ohne Forward-Deklaration ... end; |
AW: Reihenfolge in Type-Deklaration
Wenn ich z.B. für den VirtualTreeView den NodeData-Record deklariere, ist das dann nicht auch eine Forward-Deklaration?
Delphi-Quellcode:
TYPE
PNodeData = ^TNodeData; TNodeData = RECORD Beschreibung : String; Anzahl : Integer; ... END; |
AW: Reihenfolge in Type-Deklaration
In der Form eines Pointers, Ja!
|
AW: Reihenfolge in Type-Deklaration
Jupp, siehe mein Code-Beispiel.
Ach ja, wenn man zwischen Forwarddeklaration und eigentlicher Deklaration einen Compilerfehler hat, dann dreht schon seit immer der Compiler durch und zeigt auf die Stelle der Forwarddeklaration ... die wirkliche Fehlerstelle darf man dann brav selber suchen. :angel: Jaaaa, es ist theoretsich auch wirklich der "erste" Fehler, da die Forwarddeklaration dann nicht vollständig ist, aber das hätte man natürlich auch abfangen können. Genauso dreht der Compiler übrigens auch bei den generischen Typen durch, wenn er auf einen Fehler trifft. (man landet da nicht an der Verwendungsposition oder in der Deklaration des Typen, sondern meistens bei "implementation" in der Unit, wo man den Typen verwenden wollte) |
AW: Reihenfolge in Type-Deklaration
Dass ein Record kein Feld seines eigenen Typs beinhalten kann, ist ja auch logisch, da es sich ja nicht um einen Nullable Type handelt. Also würde es einen Record im Record geben, der wieder einen Record hat, der wieder einen Record hat usw. Bis in alle Ewigkeit würde es weltweit nicht genügend Speicher geben, um das aufzunehmen, da der Verbrauch ja unendlich ist.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:51 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