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

soficher Messages postés 3 Date d'inscription jeudi 9 novembre 2000 Statut Membre Dernière intervention 20 juillet 2006 - 20 juil. 2006 à 13:01
hibakusha Messages postés 25 Date d'inscription vendredi 4 août 2006 Statut Membre Dernière intervention 23 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);

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;  
A voir également:

2 réponses

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

zNoRt~!
0
Rejoignez-nous