Bonjour,
J'ai un problème de références circulaires.
Les solutions trouvées dans les livres, la FAQ et le forum ne conviennent pas dans ce cas. Peut-etre que quelqu un a une solution a mon probleme ?
Mon probleme est le suivant :
2 unités (ClassX.pas et ClassY.pas) . Dans chacune des unités, une classe est définie : l'unité ClassX.pas contient la classe TClassX et l'unité ClassY.pas contient la classe TClassY. La classe TClassX contient une référence sur un objet de type TClassX et La classe TClassY contient une référence sur un objet de type TClassX. (ci-dessous le code)
Mes deux classes doivent etre dans des unites separees.
Etant donné que la définition des classes contient une reference d'objet de l'autre classe, je suis obligé de mettre une instruction "uses" dans la partie "interface" de chacune des unités (sinon, j ai une erreur de compilation). Si je met un "uses" dans les parties interface, j ai un probleme de compilation de type "référence circulaire d'unité".
La solution classiquement proposée est de mettre le "uses" dans la partie implementation. Mais, cela ne marche pas puisque chaque classe contient une reference sur l autre classe.
Si je met la declaration de l'une des classe dans la partie implementation, elle ne peut plus etre utilisee par l autre classe.
Il me reste encore la solution (solution pas encore testee) de faire une unite rassemblant toutes les interfaces de mes classes, et de faire
une unite par implementation. Mais, je prefere eviter cette solution.
Quelqu'un aurait-il, stp, une idee pour resoudre ce probleme ?
Ludo
______________________________
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32 unit ClassX; interface uses Contnrs,StdCtrls,SysUtils,ClassY; type TClassX = class private TY : TClassY; end; implementation ... end. ------------------------------------------------------------------------------------- unit ClassY; interface uses Contnrs,StdCtrls,SysUtils,ClassX; type TClassY = class private TX : TClassX; implementation ... end.
Balise Code rajouté par yobenzen
Partager