Bonjour à tous,
J'inaugure ici mon premier post, alors n'hésitez pas à me signaler toute erreur d'utilisation ...
J'ai donc un souci avec des pointeurs de fonctions membres en C++.
Je pense que c'est plus un problème syntaxique mais je vous laisse juger :
J'ai bien sûr simplifier le code
Pour info (si c'est utile) je suis sous Eclipse.
Voici mon .h :
et mon .c :
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 class maClasse; typedef unsigned char (maClasse::*AffMemberFn)(); #define CallMemberFn(object, ptrToMember) ((object).*(ptrToMember)) class maClasse{ private: [...] void Gestion0(); unsigned char Gestion1(); unsigned char Gestion2(); unsigned char Gestion3(); void MaFonction(int i, AffMemberFn pfm1, AffMemberFn pfm2, AffMemberFn pfm3); public: [...] }
L'erreur que j'ai se situe dans "MaFonction" au niveau de l'appel des pointeurs (result = pfm1()) : must use '.*' or '->*' to call pointer-to-member function in pfm1(...)
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
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63 void maClasse::Gestion0(){ AffMemberFn mpfm1 = NULL; AffMemberFn mpfm2 = NULL; AffMemberFn mpfm3 = NULL; short param1 = 0; if(GSM::ServerOK){ if(this->aboOk){ mpfm1 = &maClasse::Gestion1; mpfm2 = NULL; mpfm3 = &maClasse::Gestion3; param1 = 1; } else{ mpfm1 = &maClasse::Gestion1; mpfm2 = &maClasse::Gestion2; mpfm3 = NULL; param1 = 2; } } else{ mpfm1 = &maClasse::Gestion1; mpfm2 = NULL; mpfm3 = NULL; param1 = 3; } this->maFonction(param1, mpfm1, mpfm2, mpfm3); } unsigned char maClasse::Gestion1(){ } unsigned char maClasse::Gestion2(){ } unsigned char maClasse::Gestion3(){ } void maClasse::MaFonction(int i, AffMemberFn pfm1, AffMemberFn pfm2, AffMemberFn pfm3){ unsigned char result = 0; int a = Config::instance->Get(i); switch(a){ case 0:{ result = pfm1(); } break; case 1 :{ result = pfm2(); } break; case 2 :{ result = pfm3(); } break; default : break; } this->AffichePage(result); }
Voilà
J'espère que c'est pas trop incompréhensible.
Merci
Partager