F2047 Référence d'unité circulaire à '%s' (Delphi)
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.)