Récupération d'un paramètre de type void*

Récupération d'un paramètre de type void* - C++ - Programmation

Marsh Posté le 09-04-2013 à 22:22:39    

Bonjour à tous,

 

Je poste ici dans l'espoir de trouver un peu d'aide. J'essaie en vain de faire fonctionner le bout de code qui suit, je vous explique la situation. Je développe un programme assez simple sous OpenCV dans lequel j'utilise les fonctions:

Code :
  1. void setMouseCallback(const string& winname, MouseCallback onMouse, void* userdata=0 )


Code :
  1. static void onMouse(int event, int x, int y, int flags, void*)
 

Pour lire les évenements sur la souris.

 

OnMouse est une fonction que je définis moi-même mais dans la mesure où elle doit être de type MouseCallback sa signature est imposée pour le bon fonctionnement de setMouseCallback (du moins c'est comme ça que j'ai compris les choses mais à priori c'est le cas). Oui, en fait le truc c'est que jusqu'à présent je n'ai jamais réellement travaillé en mode graphique avec les event handler et ce genre de choses alors il y a beaucoup de réflexes et de raisonnements que je dois acquérir.

 

Mon problème est que je souhaite passer des données à ma fonction onMouse, il s'agit d'une variable dont le type est la classe Photo que j'ai crée moi-même, voici mon code:

Code :
  1. bool Points::dessinerPoints(Photo& photo)
  2. {
  3.  setMouseCallback( "Display Window", onMouse, &photo );
  4.  return true;
  5. }
  6. void Points::onMouse(int event, int x, int y, int flags, void* image)
  7. {
  8.  Photo& photo = reinterpret_cast<Photo&>(image);
  9. ...


Tout compile normalement. Lors de l'appel de setMouseCallback ma référence &photo pointe vers le bon objet mais le problème est que dans la fonction onMouse elle-même la référence &photo pointe vers n'importe quoi... C'est comme si elle ne reçoit pas le bon paramètre lorsqu'elle est appelée, mais ça n'aurait aucun sens. Bien entendu,cela fait planter le reste de mon côte. Je commence vraiment à sécher, j'ai cherché tout l'après midi !!

 

Toute aide serait la bienvenue

 

:jap:


Message édité par Profil supprimé le 09-04-2013 à 22:30:00
Reply

Marsh Posté le 09-04-2013 à 22:22:39   

Reply

Marsh Posté le 10-04-2013 à 08:35:28    

Photo* photo = reinterpret_cast<Photo*>(image);


---------------
Ta peau de nacre noir, la courbe de ton cul
Reply

Marsh Posté le 10-04-2013 à 10:25:04    

:jap:
 
Effectivement tout fonctionne avec un pointeur, cependant je ne comprend pas pourquoi je ne peux pas le faire avec des références :/

Reply

Marsh Posté le 10-04-2013 à 12:24:23    

Tu peux faire ça :
 
Photo& photo = *(reinterpret_cast<Photo*>(image));
 
 
 


---------------
Ta peau de nacre noir, la courbe de ton cul
Reply

Marsh Posté le 10-04-2013 à 13:20:49    


Parce que tu castes un pointeur en référence, faut caster en pointeur.


---------------
Perhaps you don't deserve to breathe
Reply

Marsh Posté le 10-04-2013 à 15:41:21    

Merci beaucoup pour votre aide!

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed