web-dev-qa-db-fra.com

La référence à la fonction membre non statique doit être appelée

J'utilise C++ (pas C++ 11). J'ai besoin de faire un pointeur sur une fonction à l'intérieur d'une classe. J'essaie de faire ce qui suit:

void MyClass::buttonClickedEvent( int buttonId ) {
    // I need to have an access to all members of MyClass's class
}

void MyClass::setEvent() {

    void ( *func ) ( int ); 
    func = buttonClickedEvent; // <-- Reference to non static member function must be called

}

setEvent();

Mais il y a une erreur: "La référence à la fonction membre non statique doit être appelée". Que dois-je faire pour créer un pointeur vers un membre de MyClass?

26
JavaRunner

Le problème est que buttonClickedEvent est une fonction membre et vous avez besoin d'un pointeur sur membre pour l'invoquer.

Essaye ça:

void (MyClass::*func)(int);
func = &MyClass::buttonClickedEvent;

Et puis quand vous l'invoquez, vous avez besoin d'un objet de type MyClass pour le faire, par exemple this:

(this->*func)(<argument>);

http://www.codeguru.com/cpp/cpp/article.php/c17401/C-Tutorial-PointertoMember-Function.htm

27
imreal

Vous voudrez peut-être jeter un œil à https://isocpp.org/wiki/faq/pointers-to-members#fnptr-vs-memfnptr-types , en particulier [33.1] Le type de "fonction pointeur-sur-membre" est-il différent de "pointeur-sur-fonction"?

9
xiaodong