![]() |
Frage zu Lösungsmöglichkeiten bei Kreuzverweis von Units
Hallo,
ich habe 2 Klassen die auf sich selbst verweisen:
Delphi-Quellcode:
unit uKnot;
interface uses uEdge; type TKnot = class(TObject) private Next: TKnot; Edge: TEdge; Data: String; .... public ... end;
Delphi-Quellcode:
Ich habe jetzt 2 Lösungsmöglichkeiten gefunden.
unit uEdge;
interface uses uKnot; type TEdge = class(TObject) private ToAd : TKnot; Next : TEdge; Weight: Integer; public ... end; 1.: Alles in eine Unit:
Delphi-Quellcode:
Er erkennt (bei dem Kommentar) TEdge nicht, weil es erst später in der Unit kommt. Tausche ich die beiden Klassen, habe ich dasselbe Problem in Grün mit TKnot.
unit uKnotEdge;
interface type TKnot = class(TObject) private Next: TKnot; Edge: TEdge; // [Fehler] uKnotEdge.pas(9): Undefinierter Bezeichner: 'TEdge' Data: String; ... public ... end; TEdge = class(TObject) private ToAd : TKnot; Next : TEdge; Weight: Integer; public ... end; implementation ... 2.: Eine 3. Unit. Das habe ich noch nicht verstanden. Ich habe einiges rumprobiert, was ich in anderen Threads gelesen habe, aber ich habe das nicht so richtig verstanden. Könnte das einer für mich mal mit meinem Beispiel andeuten? :) |
Re: Frage zu Lösungsmöglichkeiten bei Kreuzverweis von Units
So sollte es funktionieren
Delphi-Quellcode:
unit uKnotEdge;
interface type TEdge = class; TKnot = class(TObject) private Next: TKnot; Edge: TEdge; // [Fehler] uKnotEdge.pas(9): Undefinierter Bezeichner: 'TEdge' Data: String; ... public ... end; TEdge = class(TObject) private ToAd : TKnot; Next : TEdge; Weight: Integer; public ... end; implementation ... |
Re: Frage zu Lösungsmöglichkeiten bei Kreuzverweis von Units
Jupp, das ganze nennt sich dann 'Forward declaration'. Der Typ wird am Anfang der Unit bekannt gemacht - der Compiler weiss dann, dass es diesen Typen später geben wird und er nimmt den erstmal als bekannt hin.
|
Re: Frage zu Lösungsmöglichkeiten bei Kreuzverweis von Units
Ja, suppi. :) Das funktioniert sogar. :mrgreen:
Jetzt interessiert mich aber noch wie man das mit einer Extra-Unit machen kann. 2 Klassen in einer Unit, die ich in ihren Methoden eh immer durcheinander bringe, sind keine gute Idee. :lol: |
Re: Frage zu Lösungsmöglichkeiten bei Kreuzverweis von Units
Zitat:
|
Re: Frage zu Lösungsmöglichkeiten bei Kreuzverweis von Units
Zitat:
|
Re: Frage zu Lösungsmöglichkeiten bei Kreuzverweis von Units
Zitat:
Oder du benutzt ein Interface, das in einer dritten Unit liegt und implementierst dieses durch die Klasse in der zweiten Unit. Die Unit mit der Deklaration des Interfaces kannst du in beide Units einbinden. |
Re: Frage zu Lösungsmöglichkeiten bei Kreuzverweis von Units
Du könntest natürlich auch Include Dateien verwenden. Ist zwar nicht so schön, aber währe auch eine Lösung.
Somit könntest du alle Klassen-Header in einer Datei packen und den dazugehörigen Code in eine jeweilige Extra Datei. In Lazarus gibt es den CodeExplorer sowas müsste Delphi glaube ich auch haben. Der ist Praktisch. In meinen Units ist immer sehr viel Los bzw. sind immer sehr viele Klassen und sowas drin. Aber der CodeExplorer ist hier eine Hilfe. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:53 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 by Thomas Breitkreuz