CPP - probleme structure contenant pointeur sur fonction

Résolu
cs_poueted Messages postés 17 Date d'inscription mardi 15 avril 2008 Statut Membre Dernière intervention 8 septembre 2010 - 28 sept. 2008 à 16:51
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 - 28 sept. 2008 à 18:36
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

SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
28 sept. 2008 à 17:37
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++ (@++)<!--
cs_jfrancois Messages postés 482 Date d'inscription vendredi 26 août 2005 Statut Membre Dernière intervention 5 décembre 2009 2
28 sept. 2008 à 18:31
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
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
28 sept. 2008 à 18:36
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++ (@++)<!--
Rejoignez-nous