À l'aide d'un membre de pointeur de fonction au sein d'une classe
Donné un exemple de classe:
class Fred
{
public:
Fred()
{
func = &Fred::fa;
}
void run()
{
int foo, bar;
*func(foo,bar);
}
double fa(int x, int y);
double fb(int x, int y);
private:
double (Fred::*func)(int x, int y);
};
J'obtiens une erreur de compilation à la ligne de l'appel de la fonction membre via le pointeur "*func(foo,bar)", en disant: "terme n'est pas d'évaluer une fonction prenant 2 arguments". Ce que je fais mal?
merci pour le montage 🙂
...pas de problème 😉
...pas de problème 😉
OriginalL'auteur neuviemeporte | 2010-05-24
Vous devez vous connecter pour publier un commentaire.
La syntaxe que vous devez ressemble:
De sorte que votre appel:
Je crois une syntaxe alternative serait:
OriginalL'auteur fbrereto
Vous avez besoin de funky syntaxe pour appeler des fonctions de membre par le biais d'un pointeur:
OriginalL'auteur Thomas
Il y a deux choses que vous devez prendre soin de. La première est la déclaration de la fonction pointeur de type:
Prochaine est la syntaxe de l'appel de la fonction à l'aide d'un pointeur:
Ici est la modification de l'échantillon de code qui permettra de compiler et d'exécuter:
OriginalL'auteur Vijay Mathew
Un membre de la fonction avec deux arguments est vraiment un trois fonction arg. " il " est un argument implicite donc l'erreur que vous obtenez est sur le manque de 'cette' arg.
OriginalL'auteur stonemetal
Non statique de la classe de fonctions membres ont caché ce pointeur en argument.
Je pense, la syntaxe
(this->*func)(foo,bar)
est le moyen de faire un compilateur de comprendre qu'il a besoin d'ajouter cela à la fonction.
OriginalL'auteur Learner