RS8
Messages postés100Date d'inscriptionvendredi 18 mai 2007StatutMembreDernière intervention15 juillet 2009
-
13 juil. 2009 à 14:49
RS8
Messages postés100Date d'inscriptionvendredi 18 mai 2007StatutMembreDernière intervention15 juillet 2009
-
15 juil. 2009 à 15:19
Bonjour,
je fais actuellement de 'lOpenGL.
Je voudrais avoir deux fichiers : drawing.cpp et main.cpp
Dans le main.cpp il n'y a que le main et dans drawing.cpp il y a toutes les fonctions nécessaires à l'affichage en OpenGL (init(), display(), reshape(), ...)
Je crée un objet drawing dans le main et j'appelle mes fonctions initt(), display(), ...
Mais le problème est que lorsque dans le main je fais GlutDisplayFunc(display) et GlutReshapeFunc(reshape) j'ai le message d'erreur suivant :
erreur : argument of type 'void (Drawing::) (int, int)' does not match 'void (*) 'int, int)' et apreil pour le glutReshapeFunc.R
Que dois-je changer pour que cela fonctionne ?
Je joins le drawing.h ainsi que le main :
Fichier drawing.h :
class Drawing {
public:
Drawing(int a, int b);
void init();
void reshape(int w, int h);
void display();
};
cs_Lucky92
Messages postés180Date d'inscriptionmercredi 22 décembre 2004StatutMembreDernière intervention16 août 20122 13 juil. 2009 à 15:49
Salut,
On ne peut pas utiliser des méthodes d'objets comme pointeurs de fonction.
Il faut utiliser soit des méthodes de classe ( méthodes statiques ), soit des foncteurs ( objet-fonctions ).
RS8
Messages postés100Date d'inscriptionvendredi 18 mai 2007StatutMembreDernière intervention15 juillet 2009 13 juil. 2009 à 16:13
Ok mais le problème c'est que dans display j'appelle d'autres méthodes et celles-ci ne peuvent pas être statiques ! Donc je ne peux pas mettre display en statique.
cs_juju12
Messages postés966Date d'inscriptionsamedi 3 avril 2004StatutMembreDernière intervention 4 mars 20104 13 juil. 2009 à 18:39
tu peux créer une fonction display statique qui appellera la fonction display de l'objet, mais il faudra stocker quelque part l'identité de l'instance de classe avec laquelle on travaille. Par exemple :
int main(void)
{
Drawing D(3,3);
Drawing::SetCurrentObject(&D);
glutDisplayFunc(D::com_display);
// ...
}
tu peux éventuellement appeler SetCurrentObject() dans le constructeur même de Drawing pour ne pas avoir à le faire dans le code, sauf en cas de changement d'objet.