Fehler bei Pointer zu Member Funktion aus anderer Klasse
-
Hallo,
ich will einen Pointer auf eine Member Funktion einer anderen Klasse machen, aber irgendwie funktioniert das nicht.Updater.h
class KeyController; class Updater{ public: Updater(); private: typedef void (KeyController::*FunkPointer) (int); FunkPointer funkP; }Updater.cpp
#include "keycontroller.h" Updater::Updater(){ funkP = &(KeyController::a); funkP = &(KeyController::b); }KeyController.h
class KeyController { public: void a(int); static void b(int); }In a und b steht nichts drin.
Bei funkP = &(KeyController::a); krieg ich den Fehler:
Fehler:invalid use of non-static member function 'void KeyController::a(int)'Bei funkP = &(KeyController::b);:
Fehler:cannot convert 'void (*)(int)' to 'Updater::FunkPointer {aka void (KeyController::*)(int)}' in assignmentIch kapiers nicht, ich machs doch genau so wie hier: http://www.parashift.com/c++-faq/typedef-for-ptr-to-memfn.html
-
Nein, tust du nicht. Mach die Klammern weg.
-
Kellerautomat schrieb:
Nein, tust du nicht. Mach die Klammern weg.
Alle?

-
Kellerautomat schrieb:
Nein, tust du nicht. Mach die Klammern weg.
Oh, stimmt, mit a gehts jetzt. Danke

Bei der static Funktion b gehts aber nur, wenn ichtypedef void (*FunkPointer) (int);statt
typedef void (KeyController::*FunkPointer) (int);schreibe.
Kann man einen Pointer machen, der sowohl auf static als auch auf nicht-static Funktionen zeigen kann?
-
Das liegt daran, weil du für einen static-Methodenaufruf kein Objekt benötigst. Ja kann man, ist aber etwas umständlicher. Wenn du nach "delegate c++" oder "delegation" googlest wirst du da einige Implementationen finden (Boost::function bietet genau das auch, ist aber Performancetechnisch sehr langsam)
Edit: was nicht möglich ist (jedenfalls im C++ Standard), ein und denselben Pointer auf Methoden und Static-Methoden zeigen zu lassen. Gehen tut AFAIR aber Static-Methoden und Funktionen (OO-Sinne). Zusätzlich musst du für die const-correctness auch noch einen eigenen Pointer haben.