Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1838 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  Problème avec un appel de fonction

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Problème avec un appel de fonction

n°348616
manu025
Posté le 31-03-2003 à 21:54:40  profilanswer
 

J'ai un petit souci dans un prog en open GL et C++.
 
Je vais essayer de faire simple :
 

Code :
  1. classe cassebrique {
  2. public:
  3.  void reshape(int w, int h);
  4.  void jeu();
  5. }

 
 
La fonction jeu uilise à un moment donné la fonction GLUT suivante :
 

Code :
  1. glutReshapeFunc(reshape);


 
et le compilo me retourne ça :
 

Code :
  1. cassebrique.cpp: In constructor `cassebrique::cassebrique()':
  2. cassebrique.cpp:199: no matches converting function `reshape' to type `void (*)(int, int)'


 
Si la fonction reshape n'appartient pas a la classe cassebrique, cela marche sans souci, voyez vous le problème ?
Merci d'avance.


Message édité par manu025 le 31-03-2003 à 22:08:38
mood
Publicité
Posté le 31-03-2003 à 21:54:40  profilanswer
 

n°348619
gatorette
Posté le 31-03-2003 à 22:04:36  profilanswer
 

Je vois plusieurs choses qui me dérangent :

  • Apparemment reshape doit être du type void func(int, int) or toi tu la déclare comme void func(void). Il me semble que ça n'est pas valide.
  • Ta fonction reshape fait partie de ta classe cassebrique, il faut donc indiquer cette appartenance : cassebrique::reshape.
  • Je ne connais pas OpenGL, mais je pense que ta fonction reshape doit être déclarée static (j'imagine que tu déclares une fonction callback). En effet elle ne doit être instanciée qu'une seule fois pour toutes tes classes cassbrique.
  • De mémoire, il me semble qu'il faut passer un pointeur vers ta fonction (ce qu'indiquerais le (*) dans l'erreur du compilo). Là-dessus, je peux me tromper, il faudrait que j'essaie.


---------------
each day I don't die is cheating
n°348622
manu025
Posté le 31-03-2003 à 22:13:56  profilanswer
 

j'ai édité mon post, j'avais fait une erreur.
En fait pour le coup du cassebrique::reshape, cela n'est normalement pas nécessaire car je travaille dans la classe (dans le constructeur plus précisément).
Pour le static, je ne comprends pas vraiment le souci.
Et le pointeur, ben en fait la fonction glutReshapeFunc prend une fonction e nparamètre, et pas un pointeur donc ...
Bizarre.

n°348637
gatorette
Posté le 31-03-2003 à 22:27:09  profilanswer
 

manu025 a écrit :

Pour le static, je ne comprends pas vraiment le souci.


Bon je connais pas tous les détails, mais en gros si elle n'est pas static, ta fonction existe pour chaque classe que tu crée. Or une fonction callback ne doit exister qu'une seule fois (sinon OpenGL ne sait pas quelle version appeler). C'est pour ça qu'il faut la déclarer static, elle sera donc commune à toutes les instances de ta classe.
C'est pour cette raison qu'il faut aussi la passer en temps que cassebrique::reshape.
Pour information, dans ta fonction, tu ne pourras accéder à this (comme elle est commune à toutes tes instances de cassebrique). En fait, utiliser une fonction membre comme fonction callback n'a que très peu d'intérêt en dehors de la clarté.
 

manu025 a écrit :

Et le pointeur, ben en fait la fonction glutReshapeFunc prend une fonction e nparamètre, et pas un pointeur donc ...


Comme je le disais, j'ai dû me planter, je ne sais jamais comment passer une fonction en paramètre (juste le nom ou '&' + le nom).


---------------
each day I don't die is cheating
n°348658
manu025
Posté le 31-03-2003 à 22:55:46  profilanswer
 

Je comprends a peu près le problème que tu évoques mais l'ajout de static induit d'autres erreurs :
 
 

Code :
  1. cassebrique.o(.text+0xdbf): In function `cassebrique::cassebrique[in-charge]()':
  2. : undefined reference to `glBlendFunc'
  3. cassebrique.o(.text+0xdcd): In function `cassebrique::cassebrique[in-charge]()':
  4. : undefined reference to `glLightModeli'
  5. cassebrique.o(.text+0xdd9): In function `cassebrique::cassebrique[in-charge]()':
  6. : undefined reference to `glutReshapeFunc'
  7. cassebrique.o(.text+0xde5): In function `cassebrique::cassebrique[in-charge]()':
  8. : undefined reference to `glutDisplayFunc'
  9. cassebrique.o(.text+0xdf1): In function `cassebrique::cassebrique[in-charge]()':
  10. : undefined reference to `glutIdleFunc'
  11. cassebrique.o(.text+0xdf6): In function `cassebrique::cassebrique[in-charge]()':

 
 
Je me souviens avoir eu une erreur de ce type dans un projet utilisant le toolkit QT mais je ne me souviens plus de la raison...


---------------
-@- When code matters more than commercials -@-
n°348663
gatorette
Posté le 31-03-2003 à 23:05:54  profilanswer
 

Je suis pas un expert en g++ mais je suppose que c'est au moment du link que tu as ces erreurs. Il faut indiquer lors de la compilation que tu veux linker avec la library OpenGL.
tu peux regarder cette page par exemple.


---------------
each day I don't die is cheating

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  Problème avec un appel de fonction

 

Sujets relatifs
probleme avec JPopupMenu[C/gcc] Problème à la compilation louche
problème tableau multidimensionnel[shell]obtenir la date -1 (reconvertit en probleme de awk ;) )
fonction fwrite[PHP] probleme avec la fonction date()
[PHP] Fonction phpinfo()fonction pour recupperer les inputs de la page précedente
[HTML/JS] Mobilité d'un calque en fonction de l'ascenceur 
Plus de sujets relatifs à : Problème avec un appel de fonction


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR