Erreur : illegal call of non-static member function !!!
soficher
Messages postés3Date d'inscriptionjeudi 9 novembre 2000StatutMembreDernière intervention20 juillet 2006
-
20 juil. 2006 à 13:01
hibakusha
Messages postés25Date d'inscriptionvendredi 4 août 2006StatutMembreDernière intervention23 mai 2007
-
23 sept. 2006 à 18:22
Bjr a tous;
j'ai 1 ptt probleme dans la declaration d'une classe, il m'affiche l'erreur:
'CTapiLine::DoLineCallState' : illegal call of non-static member function
see declaration of 'DoLineCallState'
la declaration du classe:
class CTapiLine
{
public:
-
-
static VOID CALLBACK lineCallbackFunc(DWORD dwDevice, DWORD dwMsg, DWORD dwCallbackInstance, DWORD dwParam1, DWORD dwParam2, DWORD dwParam3);
VOID CTapiLine::lineCallbackFunc(DWORD dwDevice, DWORD dwMsg, DWORD dwCallbackInstance, DWORD dwParam1, DWORD dwParam2, DWORD dwParam3)
{
//the call back function for check the stat of connection
switch(dwMsg)
{
case LINE_CALLSTATE:
DoLineCallState(dwDevice, dwMsg, dwCallbackInstance,
dwParam1, dwParam2, dwParam3); // mon pbm je ne peux pas appeler 7 fonction
break;
-
-
-
}
}
gamemonde
Messages postés336Date d'inscriptionsamedi 9 août 2003StatutMembreDernière intervention 9 juillet 20112 20 juil. 2006 à 13:13
lineCallbackFunc etaant statique tu ne peux pas faire :
- utiliser un attribut non statque
- utiliser une methode non -statique
ce que tu fais car etant donner que lineCallbackFuncpeux etre appeller sans instance , DoLineCallState peux ne pas exister elle car elle a besoin d'une instance
donc soit tu la rend instanciable ou tu met ta fonction DoLineCallState statique
ou tout autr emoyen permettant soit d'utiliser une instance ou pas
hibakusha
Messages postés25Date d'inscriptionvendredi 4 août 2006StatutMembreDernière intervention23 mai 20071 23 sept. 2006 à 18:22
Présenté autrement : une methode static d'une classe X ne peut faire que deux choses :
- appeler une autre methode de la classe X.
- modifier un membre static de la classe X.
Ce que te dit le compilateur c'est que tu viole cette regle : lineCallbackFunc est une méthode static et ne peut donc pas appeler la methode DoLineCallState qui ne l'est pas.
L'interet d'une methode static c'est que tu peut l'appeler sans avoir à instantier un objet de cette classe. Tu peut faire n'importe où dans ton code CTapiLine::lineCallbackFunc(bla, bla, bla) [mais pas CTapiLine::DoLineCallState(glop, glop, glop) car DoLineCallState n'est pas static]
Tu trouvera plein d'exemples de methodes static en java et .net (C#, etc.), qui te montrerons l'interet des methodes static.