![]() |
Zirkulärer Bezug bei Units und Objekten
Hallo, Delphi-Praktiker,
ich habe folgendes Problem, hier dargestellt am Beispiel eines Fischteichs: Gegeben: Die Klassen TFisch, TFischListe und TTeich, jeweils in eigenen Units
Delphi-Quellcode:
unit UFisch
interface type TFisch = class(TObject) Art: String; Gewicht: Integer; end;
Delphi-Quellcode:
unit UFischListe;
interface uses Contnrs, UFisch; type TFischListe = class(TObjectList) // Hier überschreibe ich noch die entsprechenden Methoden von TObjectList, dass alle Elemente vom Typ TFisch sind end;
Delphi-Quellcode:
Jetzt sollen meine Fische aber mehr können, zum Beispiel andere Fische fressen. Dafür muss ein Fisch aber irgendwie auf die anderen Fische im Teich zugreifen können. Wie kann ich das machen? Wenn ein Fisch alle anderen Fische im Teich kennen soll, muss er ja auf den Teich zugreifen können. Dann aber löse ich ärgerlicherweise einen zirkulären Bezug aus:
unit UTeich;
interface uses UFischListe; type TTeich = class(TObject) Laenge: Integer; Breite: Integer; Hoehe: Integer; Fische: TFischListe; end;
Delphi-Quellcode:
unit UFisch
interface uses UTeich; //<-- Hier kommt es zu einem zirkulären Bezug! type TFisch = class(TObject) Art: String; Gewicht: Integer; Teich: TTeich; //<-- Hier kommt es zu einem zirkulären Bezug! end; Viele Grüße Klaus-Peter |
Re: Zirkulärer Bezug bei Units und Objekten
Binde die anderen Units im Implementationsteil ein
|
Re: Zirkulärer Bezug bei Units und Objekten
Hallo Markus,
das geht leider nicht. Die Unit muss im uses des interface-Abschnitts stehen, wenn ich sie in meiner Typ-Deklaration verwenden möchte.
Delphi-Quellcode:
Und andersherum geht es auch nicht, weil TTeich TFisch (bzw. TFischListe s. oben) braucht...
unit UFisch;
interface type TFisch = class(TObject) Art: String; Gewicht: Integer; Teich: TTeich; //Hier kennt er TTeich nicht, weil UTeich nicht im interface-Abschnitt eingebunden wurde end; implementation uses UTeich; Klaus-Peter |
Re: Zirkulärer Bezug bei Units und Objekten
Ich würde TFisch, TFischListe und TTeich in die gleiche Unit setzen.
Dann kann man eine "Forward Declaration" ansetzen:
Delphi-Quellcode:
type
TFisch = class; // "es gibt eine Klasse TFisch; Genaueres folgt weiter unten" TFischListe = class; TTeich = class; TFisch = class(TObject) Art: String; Gewicht: Integer; Teich: TTeich; ... end; |
Re: Zirkulärer Bezug bei Units und Objekten
Vielen Dank, sx2008. Es funktioniert wunderbar!
Klaus-Peter |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:01 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