Bonjour à toutes et à tous,
Je suis désolé, mais la présentation de mon problème est un peu longue. Merci d'avance à ceux qui auront le courage d'aller jusqu'au bout.
J'ai une classe de composant visuel :
Dans son constructeur, "surAppui = NULL". La fonction "select" est la suivante :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 Class Comp { ... void(*surAppui)(boolean); virtual boolean select(int x, int y); }
Cette fonction "surAppui" a le même mécanisme que le "onClick" dans Windows par exemple.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 Comp::select(int x, int y) { if (x et y dans la zone d'appui sur le composant) if (surAppui != NULL) surAppui(un boolean); // je renvois sur une fonction qui va faire ce que je veux }
J'ai créé des enfants de "Comp", par exemple "Bouton".
Maintenant, à l'utilisation, j'instancie une classe "Bouton monBouton" et j'affecte à "surAppui" une fonction "quoiFaire" :
Tout ce mécanisme fonctionne très bien, mais maintenant, je voudrais que ce mécanisme fonctionne à l'intérieur de mes classes.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 monBouton.surAppui = &quoiFaire; void quoiFaire(boolean a) { //Exécute ce que j'ai envie de faire }
J'ai créé une classe "Page" descendant de "Comp" et utilisant "Bouton" :
Alors que la construction de ce lien est semblable à celui qui fonctionne, c'est sur cette dernière instruction que le compilateur n'est pas d'accord. Il me renvoit l'erreur suivante :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 class Page : public Comp { Bouton btn1; void chgtPage(boolean); // la fonction que veux associer à "surAppui" virtual boolean select(int x, int y); // modifie le comportement de la classe de base Page(les params qui vont bien) : btn1(ses params) { btn1.surAppui = &chgtPage // l'affectation de "chgtPage" à "surAppui" } }
Voilà, j'ai toujours été mal à l'aise avec ce genre de message. Si vous pouviez m'aider à trouver ce qui cloche.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 MaClasse.cpp:13:24: error: ISO C++ forbids taking the address of an unqualified or parenthesized non-static member function to form a pointer to member function. Say '&Page::chgtPage' [-fpermissive] btn1.surAppui = &chgtPage; ^ MaClasse.cpp:13:21: error: cannot convert 'void (Page::*)(boolean) {aka void (Page::*)(bool)}' to 'void (*)(boolean) {aka void (*)(bool)}' in assignment btn1.surAppui = &chgtPage; ^
Merci de votre aide.
Pierre
Partager