Erreur : illegal call of non-static member function !!!

Signaler
Messages postés
3
Date d'inscription
jeudi 9 novembre 2000
Statut
Membre
Dernière intervention
20 juillet 2006
-
Messages postés
25
Date d'inscription
vendredi 4 août 2006
Statut
Membre
Dernière intervention
23 mai 2007
-
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);

protected:
         -
         -
void DoLineCallState(DWORD dwDevice, DWORD dwMessage, 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; 
         -
         -
         -
   }
}

void CTapiLine::DoLineCallState(
    DWORD dwDevice, DWORD dwMessage, DWORD dwCallbackInstance,
    DWORD dwParam1, DWORD dwParam2, DWORD dwParam3)
{
        -
         -
 return;
}

et merci a tous;  

2 réponses

Messages postés
336
Date d'inscription
samedi 9 août 2003
Statut
Membre
Dernière intervention
9 juillet 2011
2
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
Messages postés
25
Date d'inscription
vendredi 4 août 2006
Statut
Membre
Dernière intervention
23 mai 2007

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.

zNoRt~!