Adresse d'une méthode de classe
Bonjour,
Je suis en train de faire un petit projet avec la librairie Wii Yourself qui permet de connecter une Wiimote à son programme.
Dans le fichier Demo.cpp, il y a trois fonction :
Code:
1 2 3 4 5 6
| void on_state_change (wiimote &remote, state_change_flags changed, const wiimote_state &new_state){//code.....}
void PrintTitle (HANDLE console){//code.....}
int _tmain (){//code.....} |
Bref, heureusement ça marche parfaitement.
Comme j'ai voulu l'intégrer dans autre projet, j'ai voulu regrouper les éléments de Demo.cpp dans une classe.
Ainsi, voilà ce que j'ai rajouté dans Demo.h :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| #include "libs\wiimote.h"
class WiimoteHandler {
private:
HANDLE console;
wiimote_sample sine_sample, daisy_sample;
wiimote remote;
void printTitle(HANDLE console);
void on_state_change(wiimote &remote,
state_change_flags changed,
const wiimote_state &new_state);
public:
int demo_wiimote();
}; |
Remarquez la fonction _intmain() qui est devenu demo_wiimote().
Maintenant, les trois fonctions citées précédemment, sont désormais membre de la classe WiimoteHandler.
J'ai étais donc contraint de changer cette ligne :
Code:
remote.ChangedCallback = on_state_change;
en quelque chose qui ressembla à ça
Code:
remote.ChangedCallback = WiimoteHandler::on_state_change;
ou ça
Code:
remote.ChangedCallback = this->on_state_change;
Malheureusement, ça ne marche pas alors que ça devrait le faire...
Voilà l'erreur que j'ai :
Citation:
Erreur C3867 'WiimoteHandler::on_state_change'*: syntaxe non-standard*; utilisez '&' pour créer un pointeur vers un membre myproj e:\3d lab\opengl-bullet\myproj\demo.cpp 152
Erreur C2440 '='*: impossible de convertir de 'void (__cdecl WiimoteHandler::* )(wiimote &,state_change_flags,const wiimote_state &)' en 'state_changed_callback' myproj e:\3d lab\opengl-bullet\myproj\demo.cpp 152
Sauf qu'avec la première manière de faire, Visual me met du rouge sur le signe égal...
Je suis perdu...
Petits indices, qui pourront vous aider à m'aider (:aie:) :
-la variable remote est de type wiimote qui est une classe définie dans wiimote.h,
-ChangedCallback est un champ de la classe wiimote de type state_changed_callback,
-state_changed_callback est définie comme cela au début du fichier wiimote.h : typedef void (*state_changed_callback) (class wiimote &owner, state_change_flags changed, const wiimote_state &new_state); soit un pointeur de fonction renvoyant void qui a les mêmes paramètres que WiimoteHandler::on_state_change.
Remarque, lorsque la fonction on_state_change ne fait pas parti de WiimoteHandler, ça marche. Mais je veux qu'elle fasse parti de la classe justement...
J'aimerais tellement comprendre la source de mon problème....
Merci pour votre aide.