1

Salut!

J'ai un petit problème pour utiliser des fonctions de glut dans une classe C++.

Ma classe Render a une fonction show() comme ça :
void Render::show ( void )
{
	this->init();
	glutDisplayFunc(display);
	glutReshapeFunc(reshape);
	glutMouseFunc(mouse);
	glutMainLoop();
}

Si les fonction display, reshape et mouse (faisant partie de la classe) sont définies static ça ne pose pas de problème, mais si elle ne le sont pas j'ai les erreurs suivantes :
"argument of type «void (Render:smile()» does not match «void (*)()»" (pour display)
"argument of type «void (Render:smile(int, int)» does not match «void (*)(int, int)»" (pour reshape)
"argument of type «void (Render:smile(int, int, int, int)» does not match «void (*)(int, int, int, int)»" (pour mouse)

Comment faire pour les utiliser sans static?

2

Bah logiquement tu ne peux pas, si ces méthodes ne sont pas statiques alors elles doivent être appelées depuis une instance de ta classe "Render", or glut n'en a aucune connaissance, donc ne pourrait jamais les appeler. Pourquoi voudrais-tu supprimer le "static" ?

(glut c'est mal, SDL c'est mieux; ceci est un vilain troll mais j'assume)
(et ta signature est ridicule, voire même fausse pour la dernière phrase ^^)
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

3

Zephyr (./2) :
Bah logiquement tu ne peux pas, si ces méthodes ne sont pas statiques alors elles doivent être appelées depuis une instance de ta classe "Render", or glut n'en a aucune connaissance, donc ne pourrait jamais les appeler.

Oui en fait je me suis rendu compte qu'on ne peut pas utiliser OpenGL dans une classe.
Par contre on peut utiliser les membres static d'une classe pour les fonctions qui me posent problèmes en mettant par exemple glutMouseFunc(&Render::mouse);
Ça n'est pas vraiment pratique finallement
Zephyr (./2) :
Pourquoi voudrais-tu supprimer le "static" ?

Pour que l'utilisateur de la classe en question n'ai grand chose à faire pour utiliser le rendu ; juste à lancer des fonction init, load et show
Zephyr (./2) :
(glut c'est mal, SDL c'est mieux; ceci est un vilain troll mais j'assume)

Chacun son truc, j'ai commencé avec glut et le bouquin que j'ai l'utilise.
Zephyr (./2) :
(et ta signature est ridicule, voire même fausse pour la dernière phrase ^^)

mais alors si tu savais à quel point je m'en tape! ça doit faire 2 ans que je ne l'ai pas changée et c'est bien la dernière de mes préoccupations.
Pour te faire plaisir je la change mais sinon tu pouvais toujours choisir de ne pas afficher les signatures si ça te génait trop.

4

spomky (./3) :
Oui en fait je me suis rendu compte qu'on ne peut pas utiliser OpenGL dans une classe.

Heu bien sûr que si, la seule contrainte c'est effectivement que tu ne peux pas passer une méthode en guise de fonction "globale" de glut, mais c'est uniquement lié au fonctionnement très particulier de cette bibliothèque.
Par contre on peut utiliser les membres static d'une classe pour les fonctions qui me posent problèmes en mettant par exemple glutMouseFunc(&Render::mouse);Ça n'est pas vraiment pratique finallement

Une méthode statique est quasiment comme une fonction ou procédure (hors classe); donc oui ça marche ^^
Pour que l'utilisateur de la classe en question n'ai grand chose à faire pour utiliser le rendu ; juste à lancer des fonction init, load et show

C'est le cas même si tes méthodes sont statiques, non ? (je vois pas trop en quoi utiliser "static" réduit la simplicité de la lib, au contraire si tout est statique y'a même plus besoin d'instancier ton Render confus)
Pour te faire plaisir je la change mais sinon tu pouvais toujours choisir de ne pas afficher les signatures si ça te génait trop.

Nan, y'a aussi des gens qui ont des signatures intelligentes hehe
mais mci quand même tongue

(et de rien, btw)
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)