Disons que j'ai les définitions suivantes:pointeur C de la fonction de membre non un pointeur de fonction
class ScriptInterpreter {
public:
class cell;
typedef ScriptInterpreter::cell (ScriptInterpreter::*proc_t) (const std::vector<cell> &);
class cell {
public:
proc_t proc;
};
ScriptInterpreter::cell proc_add(const std::vector<cell> & c);
};
et le code suivant passe:
ScriptInterpreter::eval(ScriptInterpreter::cell cell, environment * env)
{
// ...
ScriptInterpreter::cell c;
c.proc = &ScriptInterpreter::proc_add;
return (c.*proc_)(exps);
}
Sur la ligne où je tente d'appeler la pointeur de fonction je reçois l'erreur
error: called object type 'proc_t' (aka 'ScriptInterpreter::cell (ScriptInterpreter::*)(const std::vector<cell> &)') is not
a function or function pointer
Quand j'ajoute le * devant la fonc sorte que la ligne ressemble à ceci:
ScriptInterpreter::cell c = (proc_cell.*proc_)(exps);
il produit ceci:
error: use of undeclared identifier 'proc_'
Je l'ai déjà regardé Callback functions in c++ et d'autres problèmes de ce genre, mais rien ne m'a vraiment donné un soupçon qui ne va pas ou fourni des informations au sujet de mon erreur. Je n'ai définitivement aucun nom deux fois ou quelque chose de ce genre. Aussi après avoir lu what is an undeclared identifier error and how do i fix it je suis sûr que j'ai tout bien.
Alors qu'est-ce que je fais mal?
Edit: mis à jour le code avec le code réel au lieu du code de l'espace réservé
Tout d'abord, il n'y a pas de 'B' dans votre code. Seulement 'A :: B'. Il est préférable de poster du vrai code pour votre 'main', afin que les gens comprennent de quoi vous parlez. – AnT
Vous avez besoin d'un objet de 'A' (pas' B') pour l'appeler, puisqu'il s'agit d'un pointeur vers la fonction membre de 'A'. – songyuanyao
B n'appartient pas à A – Raindrop7