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


  • Mod

    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 🙂


  • Mod

    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


Anmelden zum Antworten