CPP - probleme structure contenant pointeur sur fonction [Résolu]

Signaler
Messages postés
17
Date d'inscription
mardi 15 avril 2008
Statut
Membre
Dernière intervention
8 septembre 2010
-
Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
-
Bonjour tout le monde.

J'ai une structure :

<li>struct Operation
</li><li>{
</li><li> BOOL (*op) (BOOL, BOOL);
</li><li>int rg_arg1, rg_arg2;</li><li>} expression[MAX][1000];</li>Quand je veux indiquer une fonction a mettre :

expression[num_exp][indice].op = fonction_retournant_un_bool;

Le compilateur me signale une erreur :

"argument of type bool (fonction::)(bool,bool) does not match bool(*)(bool,bool)"

Quelqu'un saurai m'expliquer ?

Merci : )

3 réponses

Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
15
Apparemment, tu essais de passer l'adresse d'une méthode (non static). Ceci est impossible. Je ne connais aucun moyen de faire ce que tu souhaites.

C++ (@++)<!--
Messages postés
482
Date d'inscription
vendredi 26 août 2005
Statut
Membre
Dernière intervention
5 décembre 2009

Bonjour,

Comme il n'y a pas de raison que cela soit refusé, je viens de tester avec ce petit bout de code :

#include <windows.h>
#define MAX 5



struct Operation
{
   BOOL (*op)(BOOL,BOOL);
   int rg_arg1,rg_arg2;
} expression[MAX][1000];



BOOL Fonction(BOOL b1,BOOL b2)
{
   return b1 | b2;
}



int main(void)
{
   expression[0][0].op = Fonction;
   return 0;
}


et tout fonctionne ! (Visual C++ 6.0).
op attent une fonction retournant un BOOL (pas un bool) et ayant 2 arguments en entrée de type BOOL !

Jean-François
Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
15
Simplement à regarde l'erreur générer par le compilo.

argument of type bool (fonction::)(bool,bool) does not match bool(*)(bool,bool)

C'est une classe.

L'erreur n'aurait pas été la même si c'était simplement BOOL au lieu de bool. Ça aurait été une erreur de conversion de type.

C++ (@++)<!--