2014-10-13 39 views
14

Sto usando C++ (non C++ 11). Devo fare un puntatore a una funzione all'interno di una classe. Cerco di fare seguente:Il riferimento alla funzione membro non statico deve essere chiamato

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(); 

Ma c'è un errore: "Il riferimento a funzione di membro non statico deve essere chiamato". Cosa devo fare per creare un puntatore a un membro di MyClass?

+2

Non è possibile assegnare un puntatore a funzione a una funzione membro. È necessario utilizzare un puntatore al membro o una funzione gratuita. – imreal

+0

Cosa intendi per "puntatore a un membro"? Per "funzione libera" intendevi una funzione al di fuori di una classe? Sì, so che funzionerà se rimuoverò la parte "MyClass ::" dalla definizione "void MyClass :: buttonClickedEvent ..." ma ho bisogno di avere accesso ai membri di MyClass all'interno della funzione "buttonClickedEvent" .. – JavaRunner

risposta

16

Il problema è che buttonClickedEvent è una funzione membro ed è necessario un puntatore al membro per poterlo richiamare.

Prova questo:

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

E poi quando lo si richiama, è necessario un oggetto di tipo MyClass a farlo, ad esempio this:

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

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

+1

A proposito, quando chiamo questo -> * func (23) - non funziona perché ho bisogno di usarlo con parentesi come questa: (this -> * func) (23) – JavaRunner

Problemi correlati