Bonjour à tous,
J'ai un problème de définition de pointeur de fonction qui est celui ci :
J'ai deux classes A et B.
La classe B fait appel dans son constructeur au constructeur de la classe A.
Le constructeur de la classe A est paramétré.
Le type de paramètre du constructeur de la classe A est un pointeur de fonction.
Le constructeur de la classe B lorsqu’il appelle le constructeur de la classe A passe en paramètre une de ses méthodes "membre" qui a la bonne signature.
Le premier problème auquel je me suis confronté était de compiler le code.
GCC n'aimait pas le type que je lui passais.
En jetant un coup d’œil à la FAC C++ http://cpp.developpez.com/faq/cpp/?p...onction_membre , j'ai compris qu'il y avait deux moyens de faire :
-soit changer la signature de mon pointeur de fonction
-soit mettre ma méthode de classe en "static"
Je ne pouvais pas mettre ma méthode en "static" parce qu'elle manipule des données d'instance. J'ai donc opté pour la modification de la signature de mon pointeur.
Seulement, j'ai un problème de référence.
Si je définis mon pointeur en premier, le compilateur ne reconnait pas le type B.
Si je définis le type B en premier, le compilateur ne reconnait pas le pointeur de fonction.
Si je définis le type A en premier, le compilateur ne reconnais pas le pointeur de fonction
Voici le code illustrant mon propos :
Pointeur :
Classe A :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 typedef void (B::*ParameterlessFunctionPointer)(void);
Classe B:
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 class A { private : A(const A&); A& operator=(const A &); public : A(ParameterlessFunctionPointer func) { printf("naissance de A"); printf("\n"); } ~A() { printf("mort de A"); printf("\n"); } };
Main de test :
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
33
34
35
36 class B { private: A * _instanceDeA; B(const B&); B& operator=(const B &); public : void FonctionSansParamDeB() { printf("Appel de Fonction Sans Param de B"); printf("\n"); } B() { _instanceDeA = new A(FonctionSansParamDeB); printf("naissance de B"); printf("\n"); } ~B() { delete _instanceDeA; _instanceDeA = NULL; printf("mort de B"); printf("\n"); } };
Merci de votre aide.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 int main(int argc, char* argv[]) { B * instanceDeB = new B(); return 0; }
Partager