2014-10-13 1 views
14

Ich benutze C++ (nicht C++ 11). Ich muss einen Zeiger auf eine Funktion innerhalb einer Klasse machen. Ich versuche Folgendes zu tun:Verweis auf nicht-statische Member-Funktion muss aufgerufen werden

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

Aber es gibt einen Fehler: "Verweis auf nicht statische Member-Funktion muss aufgerufen werden". Was muss ich tun, um einen Zeiger auf ein Mitglied von MyClass zu setzen?

+2

Sie können keinen Funktionszeiger einer Elementfunktion zuweisen. Sie müssen entweder einen Zeiger auf Mitglied oder eine freie Funktion verwenden. – imreal

+0

Was meinst du mit dem "Zeiger auf ein Mitglied"? Als "freie Funktion" meintest du eine Funktion außerhalb einer Klasse? Ja, ich weiß, dass es funktioniert, wenn ich "MyClass ::" Teil aus der Definition "void MyClass :: buttonClickedEvent ..." entfernen werde, aber ich muss Zugriff auf Mitglieder von MyClass innerhalb der Funktion "buttonClickedEvent" haben .. – JavaRunner

Antwort

16

Das Problem ist, dass buttonClickedEvent ist eine Member-Funktion und Sie benötigen einen Zeiger auf Mitglied, um es aufzurufen.

Versuchen Sie folgendes:

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

Und dann, wenn Sie es aufrufen, müssen Sie ein Objekt vom Typ MyClass zum Beispiel so tun, this:

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

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

+1

Übrigens, wenn ich dies anrufe -> * func (23) - funktioniert es nicht, weil ich es mit Klammern wie folgt verwenden muss: (this -> * func) (23) – JavaRunner