2010-10-15 7 views
1

J'utilise une fonction de minuterie pour animer, mais j'ai des problèmes lorsque je la place dans la classe Renderer.Problèmes de glutTimerFunc

void Renderer::animate(int value) 
{ 
glutTimerFunc(TIMERMSECS, animate, 0); 
} 

Erreur: \ renderer.cpp (242): erreur C3867: ':: Renderer Animer': appel de fonction manquante liste des arguments; utiliser « & :: Renderer Animer » pour créer un pointeur vers un membre

Répondre

1

glutTimerFunc() attend un pointeur vers une fonction de type void (*func)(int value), pas une fonction de membre de type void (Renderer::*func)(int value).

Rendre Render::animate statique ou utiliser une fonction globale.

2

Le problème est que Renderer::animate est une fonction de classe et a donc un paramètre caché this. glutTimerFunc ne sait pas quelle valeur de this passer, donc si vous avez essayé de vous faufiler devant le compilateur avec un casting méchant, il se bloquerait à l'exécution.

La solution consiste à remplacer Renderer::animate par une méthode statique ou une fonction globale ordinaire. Vous devez ensuite stocker le pointeur sur votre Renderer exemple dans une variable globale, par exemple:

class Renderer 
{ 
    static void staticAnimate(int value); 
    void animate(int value); 
    ... 
}; 
Renderer *gRenderer = ...; 

void Renderer::staticAnimate(int value) 
{ 
    gRenderer->animate(value); 
} 

... 

glutTimerFunc(TIMERMSECS, &Renderer::staticAnimate, 0); 

Si sizeof(void*) <= sizeof(int) (true sur les systèmes 32 bits, mais pas vrai sur les systèmes 64 bits), vous pouvez alors passer aussi instance via le paramètre value; Cependant, puisque ce n'est pas portable et vous n'aurez jamais besoin d'appeler glutTimerFunc sur plusieurs instances différentes simultanément, vous ne devriez pas avoir à vous soucier d'utiliser une variable globale pour cela.

+0

pour gRenderer im obtenir ce -> erreur C2227: gauche '-> Animer' doit pointer vers la classe/struct/union/type générique erreur C2227: gauche '-> Animer' doit pointer vers la classe/struct/union/type générique – Aero