F2047 Référence d'unité circulaire à '%s' (Delphi)

De RAD Studio
Aller à : navigation, rechercher

Remonter à Messages d'erreur et d'avertissement (Delphi)

Une ou plusieurs unités s'utilisent les unes les autres dans leurs parties interface.

Comme le compilateur doit traduire la partie interface d'une unité avant qu'une autre unité puisse l'utiliser, le compilateur doit pouvoir trouver un ordre de compilation pour les parties interface des unités.

Vérifiez si toutes les unités de la clause uses sont réellement nécessaires et si certaines peuvent être déplacées dans la partie implémentation d'une unité.


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

unit B;
interface
uses A;
implementation
end.


Le problème est provoqué car A et B s'utilisent chacune dans leur sections interface.


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.


Remarque : Ceci peut être corrigé en suivant l'une de ces deux méthodes :

  • Vous pouvez placer les classes se référant mutuellement dans la même unité et utiliser les déclarations forward pour résoudre les problèmes.
  • Remplacez le type en conflit par un type plus général, tel que TObject ou Pointer, et utilisez les transtypages vers le type précédent qui a causé le conflit (ceci peut seulement être effectué dans le cas où le type est utilisé en interne.)