Hallo!
Ich habe es jetzt mit der Idee mit den Interfaces von rantaplan gemach. Ohne, dass ich eine "Unit3" benötige.
Trotzdem würde mich interessieren, wie dizzys Lösung dieses Problem umschifft; ich habe das folgende Beispiel doch genau so gemacht, wie es gedacht ist mit der zusätzlichen
Unit, oder?
Delphi-Quellcode:
unit Unit1;
interface
uses Unit3;
implementation
procedure TClass1.DoOneThing(Class2: TClass2);
begin
// I'm really busy
end;
end.
Delphi-Quellcode:
unit Unit2;
interface
uses Unit3;
implementation
procedure TClass2.DoAnotherThing(Class1: TClass1);
begin
// That's too much for me
end;
end.
Delphi-Quellcode:
unit Unit3;
interface
type
// Forward-deklarationen aller Klassen
TClass1 =
class;
TClass2 =
class;
// Vollständige Deklaration Class 1
TClass1 =
class
private
// Verweis auf Class 2
Class2: TClass2;
public
// Irgendeine Methode
procedure DoOneThing(Class2: TClass2);
end;
// Vollständige Deklaration Class 2
TClass2 =
class
private
// Verweis auf Class 1
Class1: TClass1;
public
// Irgendeine Methode
procedure DoAnotherThing(Class1: TClass1);
end;
implementation
end.
Jetzt meckert der Compiler wegen ungenügenden Forward- oder External-Deklarationen in Unit3 - Logisch, die Implementierun findet ja in den ursprünglichen Units statt. Trotzdem wurde das Problem von niemandem hier erwähnt. Wenn ich nun im implementation-Teil von Unit3 ein Uses auf die ursprünglichen Units setze:
Delphi-Quellcode:
implementation
uses Unit1, Unit2;
end.
kommt der Fehler natürlich nicht mehr, jedoch mag der Compiler nun in den ursprünglichen Units die Implementierungen nicht mehr - was ich nicht nachvollziehen kann.
Ob der Kreuzbezug richtig ist oder nicht möchte ich hier nicht zur Diskussion stellen - ich schließe mich da der Meinung von BenBe an.
dartrax