Bonjour,
en francais courant, ca veut dire quoi ça?
je comprend que je dois envoyer qq chose du genre void(*) mais comment je fait cela?error: argument of type `void (timer:: )()' does not match `void (*)()'
||=== Build finished
merci d'avance![]()
Bonjour,
en francais courant, ca veut dire quoi ça?
je comprend que je dois envoyer qq chose du genre void(*) mais comment je fait cela?error: argument of type `void (timer:: )()' does not match `void (*)()'
||=== Build finished
merci d'avance![]()
Ça veut dire qu'il faut que ta fonction callback soit statique.
Au passage, la fonction qui te demande un tel callback est mal faite, car elle n'accepte pas de paramètre utilisateur, rendant ainsi nécessaire l'emploi de variables globales, déguisées ou non.
SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.
"Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
Apparently everyone. -- Raymond Chen.
Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.
pas bien clair tout cela
je développe un chouia :
j'ai le code suivant :
et :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 class timer{ #include <allegro.h> #include <time.h> // Member Variables private: protected: static timer* m_ptimer; int m_iTarget_Cycle; int m_iLast_fps; int m_iFrame_Counter; int m_iActual_Cycle; void m_vtarget_incrementor(); void m_vCount_Frames(); public: timer(); virtual ~timer(); }
a la compile, le pb est le suivant :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30 #include "timer.h" timer *timer::m_ptimer = NULL; timer::timer(){ install_timer(); LOCK_VARIABLE(m_iTarget_Cycle); LOCK_VARIABLE(m_iLast_fps); LOCK_VARIABLE(m_iFrame_Counter); LOCK_FUNCTION(m_vtarget_incrementor); LOCK_FUNCTION(m_vCount_Frames); install_int_ex(m_vtarget_incrementor, BPS_TO_TIMER(60)); install_int_ex(m_vCount_Frames, BPS_TO_TIMER(1)); m_iActual_Cycle = 0; m_iTarget_Cycle = 0; } timer::~timer(){ } void timer::m_vtarget_incrementor() { m_iTarget_Cycle++; }; void timer::m_vCount_Frames() { m_iLast_fps = m_iFrame_Counter; m_iFrame_Counter = 0; };
donc, erreur sur install_int_ex().timer.cpp||In constructor `timer::timer()' :
\timer.cpp|25|error: argument of type `void (timer:: )()' does not match `void (*)()'|
timer.cpp|26|error: argument of type `void (timer:: )()' does not match `void (*)()'|
si je rend mes fonctions void m_vtarget_incrementor(); et void m_vCount_Frames();static, je doit aussi mettre les différents membres utilisés en static, et ca, je veux pas ......
![]()
Tu sais, d'habitude, on ne met un préfixe "m_" que pour les variables membres, pas les fonctions membres.
Et comme je l'ai dit, tu ne peux mettre que des fonctions statiques, sans aucun paramètre, à ta fonction install_int_ex. Pas d'bol, hein ?
PS: Pourquoi inclues-tu ces deux headers dans la classe?!![]()
SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.
"Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
Apparently everyone. -- Raymond Chen.
Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.
je sais pas en fait,
je vais voir si je peut pas les ressortir
à suivre
bon, fait le timer sans classe et ça marche.
j'aurais préféré avoir une jolie classe timer mais je vais pas faire le difficile.
merci pour la bonne question![]()
Partager