F2047 Zirkuläre Unit-Referenz auf '%s' (Delphi)

Aus RAD Studio
Wechseln zu: Navigation, Suche

Nach oben zu Fehler- und Warnungsmeldungen (Delphi)

Mehrere Units verweisen in ihren interface-Abschnitten aufeinander.

Da der Compiler den interface-Abschnitt einer Unit übersetzen muss, bevor dieser von einer anderen Unit verwendet werden kann, muss er die Compilierreihenfolge der interface-Abschnitte ermitteln können.

Prüfen Sie, ob wirklich alle Units in den uses-Klauseln benötigt werden, und ob sie nicht stattdessen im implementation-Abschnitt eingebunden werden können.


unit A;
interface
uses B;           (*A uses B, and B uses A*)
implementation
end.

unit B;
interface
uses A;
implementation
end.


Das Problem tritt auf, weil A und B sich in ihren interface-Abschnitten gegenseitig verwenden.


unit A;
interface
uses B;          (*Compilation order: B.interface, A, B.implementation*)
implementation
end.

unit B;
interface
implementation
uses A;          (*Moved to the implementation part*)
end.


Hinweis: Dieses Problem kann auf die folgendermaßen behoben werden:

  • Sie können die sich gegenseitig referenzierenden Klassen in derselben Unit mit Forward-Deklarationen verwenden.
  • Oder: Ändern Sie den Typ, der den Konflikt verursacht, in einen allgemeineren Typ, wie z.B. TObject oder Pointer, und verwenden Sie Typumwandlungen für den vorherigen Typ (das gilt nur für intern verwendete Typen).