Je programme un petit algo avec wxDevCpp 6.10.
Pour faire simple j'ai une classe de base App, qui instancie une classe
Dialog, qui elle même instancie la classe Algo.
Dialog doit instancier Algo car je dois pouvoir rinitialiser
La classe Dialog récolte les paramètres de l'algo et affiche les résultats.
Afin de tracer l'exécution de Algo, j'aimerais que Algo puisse appeler
une méthode de Dialog.
J'ai essayé de transmettre à Algo un pointeur vers Dialog, mais
évidemment je dois faire face à des erreurs de compilation en raison de
déclarations croisées : pour compiler Dialog il faut lui dire ce qu'est
Algo, et pour compiler Algo il faut lui dire ce qu'est Dialog.
Je n'ai pas trouvé pour le moment de façon simple de faire. Je pense que
ce genre de communication bidirectionnelle entre classe est un problème
d'école mais j'ai du mal à m'habituer au langage ésotérique des design
pattern pour trouver mon bonheur...
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Etienne Rousee
"sylvain&isa" a écrit
Comment résoudre ce pb ?
Utilise des prototypes de classes:
class App; class Dialog; class Algo;
class App { ...... }; class Dialog { ...... }; class Algo { ...... };
Et il faut de plus qu'il n'y ait pas un attribut de type Dialog par exemple dans App, mais plutot un attribut de type *Dialog.
La raison est qu'à chaque définition de classe, on doit pouvoir calculer sa taille. Or, dans App, on est avant la description de la classe Dialog, donc on ne connaît pas la taille de Dialog, alors que la taille d'un pointeur est toujours connue. Après, par contre, plus de problème.
--
Etienne
"sylvain&isa" <NsOsSePcAhMerre@free.fr> a écrit
Comment résoudre ce pb ?
Utilise des prototypes de classes:
class App;
class Dialog;
class Algo;
class App
{
......
};
class Dialog
{
......
};
class Algo
{
......
};
Et il faut de plus qu'il n'y ait pas un attribut de type
Dialog par exemple dans App, mais plutot un attribut
de type *Dialog.
La raison est qu'à chaque définition de classe, on doit
pouvoir calculer sa taille.
Or, dans App, on est avant la description de la classe
Dialog, donc on ne connaît pas la taille de Dialog, alors
que la taille d'un pointeur est toujours connue.
Après, par contre, plus de problème.
class App { ...... }; class Dialog { ...... }; class Algo { ...... };
Et il faut de plus qu'il n'y ait pas un attribut de type Dialog par exemple dans App, mais plutot un attribut de type *Dialog.
La raison est qu'à chaque définition de classe, on doit pouvoir calculer sa taille. Or, dans App, on est avant la description de la classe Dialog, donc on ne connaît pas la taille de Dialog, alors que la taille d'un pointeur est toujours connue. Après, par contre, plus de problème.
--
Etienne
sylvain&isa
Bonjour,
Merci pour ta réponse.
Et il faut de plus qu'il n'y ait pas un attribut de type Dialog par exemple dans App, mais plutot un attribut de type *Dialog.
La raison est qu'à chaque définition de classe, on doit pouvoir calculer sa taille. Or, dans App, on est avant la description de la classe Dialog, donc on ne connaît pas la taille de Dialog, alors que la taille d'un pointeur est toujours connue.
Je ne comprends pas : que l'attribut soit un pointeur ou non il faut bien préciser son type "Dialog". Sinon je ne pourrai pas utiliser le pointeur. Et si je déclare *dialog comme void, comment ensuite appeler une méthode ?
En fait, je viens de trouver une façon de faire avec wxWidgets : wxDialog hérite d'une classe wxWindow qui a une méthode spécifique pour ce cas : elle ajoute un évènement particulier à la liste, ce qui permet de mettre à jour la fenêtre.
Toutefois je reste intéressé par cette étude de cas : comment créer un lien bidirectionel entre deux classes...
Merci, Sylvain
Bonjour,
Merci pour ta réponse.
Et il faut de plus qu'il n'y ait pas un attribut de type
Dialog par exemple dans App, mais plutot un attribut
de type *Dialog.
La raison est qu'à chaque définition de classe, on doit
pouvoir calculer sa taille.
Or, dans App, on est avant la description de la classe
Dialog, donc on ne connaît pas la taille de Dialog, alors
que la taille d'un pointeur est toujours connue.
Je ne comprends pas : que l'attribut soit un pointeur ou non il faut
bien préciser son type "Dialog". Sinon je ne pourrai pas utiliser le
pointeur. Et si je déclare *dialog comme void, comment ensuite appeler
une méthode ?
En fait, je viens de trouver une façon de faire avec wxWidgets :
wxDialog hérite d'une classe wxWindow qui a une méthode spécifique pour
ce cas : elle ajoute un évènement particulier à la liste, ce qui permet
de mettre à jour la fenêtre.
Toutefois je reste intéressé par cette étude de cas : comment créer un
lien bidirectionel entre deux classes...
Et il faut de plus qu'il n'y ait pas un attribut de type Dialog par exemple dans App, mais plutot un attribut de type *Dialog.
La raison est qu'à chaque définition de classe, on doit pouvoir calculer sa taille. Or, dans App, on est avant la description de la classe Dialog, donc on ne connaît pas la taille de Dialog, alors que la taille d'un pointeur est toujours connue.
Je ne comprends pas : que l'attribut soit un pointeur ou non il faut bien préciser son type "Dialog". Sinon je ne pourrai pas utiliser le pointeur. Et si je déclare *dialog comme void, comment ensuite appeler une méthode ?
En fait, je viens de trouver une façon de faire avec wxWidgets : wxDialog hérite d'une classe wxWindow qui a une méthode spécifique pour ce cas : elle ajoute un évènement particulier à la liste, ce qui permet de mettre à jour la fenêtre.
Toutefois je reste intéressé par cette étude de cas : comment créer un lien bidirectionel entre deux classes...