Problem mit Zeiger auf Member Funktion
-
Hi,
Ich versuche in c++ einen Zeiger auf eine Funktion einer instanzierten Klasse zu übergeben und anschließend die Funktion über ihren Zeiger aufzurufen.
Die Übergabe erfolgt in einem template (Kurzfassung des templates):
template<class T>class array_ptr { //Funktionen sind hier deklariert } //template.cpp template<class T> array_ptr<T>::array_ptr(void) { } template<class T> void array_ptr<T>::object_removed(T *elem) { //tu was... } template<class T> void array_ptr<T>::add_elem(void) { //Zeiger wird hier definiert void (array_ptr<T>::*callback)(T*); callback=&array_ptr::object_removed; //object_removed=Funktionsname einer Funktion der template Klasse //und hier wird ein neues Object <T> erzeugt und der Funktionszeiger //übergeben T*elem=new T(callback); }Die Übergabe klappt auch, nur der Aufruf in folgender Klasse nicht:
class CMovie_Info : public C_Information { //Funktionszeiger private: void (array_ptr<CMovie_Info>::*callback)(CMovie_Info*); //Funktionen sind hier deklariert } //CMovie_Info.cpp CMovie_Info::CMovie_Info(void (array_ptr<CMovie_Info>::*callback)(CMovie_Info*)) { this->callback=callback; } CMovie_Info::~CMovie_Info(void) { [b]this->callback(this);[/b] [b]//error C2064: Ausdruck ergibt keine Funktion,[/b] [b]// die 1 Argumente übernimmt[/b] :mad: }Was mache ich hier falsch, die Funktion hat doch nur das Argument "CMovie_Info*". Wieso fordert er hier mehr Argumente?
Ich hoffe jemand kann mir helfen, ich sitze schon seit Stunden an diesem Problem.
PS:Ich benutze zum Programmieren Visual Studio 2010
-
Deine Syntax ist falsch. Das müsste, wenn ich mich nicht irre (ich komme da selbst immer durcheinander, siehe auch hier), so lauten:
(this->*callback)(this);
-
(this->*callback)(this); hat leider nicht geholfen der Fehler lautet dann: error C2440: 'newline': 'CMovie_Info *const ' kann nicht in 'array_ptr<T> *const ' konvertiert werden
aber der Link scheint hilfreich zu sein, ich werd mich da mal durcharbeiten, danke für den tipp

-
Freuro schrieb:
(this->*callback)(this); hat leider nicht geholfen der Fehler lautet dann: error C2440: 'newline': 'CMovie_Info *const ' kann nicht in 'array_ptr<T> *const ' konvertiert werden
aber der Link scheint hilfreich zu sein, ich werd mich da mal durcharbeiten, danke für den tipp

Ahh, ich sehe jetzt erst, dass callback ein Zeiger auf ein array_ptr<CMovie_Info> ist. Wie willst du das denn mit dem this eines CMovie_Info aufrufen? Das ist doch klar, dass das nicht gehen kann. Du brauchst schon ein array_ptr<CMovie_Info>-Objekt dafür.
-
thx @ SeppJ: Der Link hat mir weitergeholfen, klappt jetzt einwandfrei
danke
-
war nicht eingeloggt
Freuro=Freuroo