Compte tenu d'un exemple de classe: i Obtenez une erreur de compilateur à la ligne appelant la fonction membre via le pointeur "* FUNC (FOO, BAR)", disant: "Terme ne fait pas évaluer à une fonction prenant 2 arguments ". Qu'est-ce que je fais mal? P> p>
5 Réponses :
La syntaxe dont vous avez besoin ressemble: de sorte que votre appel serait: p> Je pense qu'une autre syntaxe serait: p>
Vous avez besoin de la syntaxe génique suivante pour appeler des fonctions de membre via un pointeur:
(this->*func)(foo, bar);
Il y a deux choses que vous devez prendre en charge. Premièrement est la déclaration du type de pointeur de fonction: Suivant est la syntaxe pour appeler la fonction à l'aide d'un pointeur: p> #include <iostream>
class Fred
{
public:
Fred()
{
func = &Fred::fa;
}
void run()
{
int foo = 10, bar = 20;
std::cout << (this->*func)(foo,bar) << '\n';
}
double fa(int x, int y)
{
return (double)(x + y);
}
double fb(int x, int y)
{
}
private:
typedef double (Fred::*fptr)(int x, int y);
fptr func;
};
int
main ()
{
Fred f;
f.run();
return 0;
}
Les fonctions de membre de la classe non statique ont caché ce pointeur comme argument. P>
Je pense, la syntaxe (Ceci -> * Func) (foo, bar) est le moyen de comprendre le compilateur qu'il doit ajouter ceci à la fonction. p>
Une fonction de membre avec deux args est vraiment une fonction Trois Arg. "Ceci" est un argument implicite de sorte que l'erreur que vous obtenez est de manquer le "Ceci" Arg. p>