Nochmal zum Thema Zeiger auf Memberfunktionen



  • Moin allerseits,

    ich schlage mich mit dem Thema Zeiger auf Memberfunktionen herum. folgendes Problem:

    In meiner Klasse ThresMaax habe ich (in der .h) folgendenden Funktionspointer deklariert:

    typedef int (ThresMaax::*CalcThresholdFuncType)();
    

    Den möchte ich (in der .cpp) wie folgt nutzen:

    CalcThresholdFuncType ThisFunc = &ThresMaax::AnyFunction;
    int x = ThisFunc();
    

    Der Compiler mault aber, weil er die letzte Zeile nicht als Funktionsaufruf erkennt (Visual C++ 7, Compilerfehler C2064)

    F1!!!

    Grusz,

    Axel



  • Bei Memberpointern brauchst du ein Objekt mit dessen Hilfe du die Methode aufrufen kannst.

    =>

    ThresMaax m;
    int x = (m.*ThisFunc)();
    


  • 😕

    Auch innerhalb der "eigenen" Klasse?

    Oder, mit anderen Worten:

    void ThresMaax::DoSomething()
    {
      ThresMaax m;
      int x = (m.*ThisFunc)();
    }
    


  • Apoplex schrieb:

    Auch innerhalb der "eigenen" Klasse?

    Auch dort. Aber da kannst du ja *this benutzen.



  • Apoplex schrieb:

    Auch innerhalb der "eigenen" Klasse?

    Natürlich.
    Du suchst wahrscheinlich folgendes:

    void ThresMaax::DoSomething()
    {
      int x = (this->*ThisFunc)();
    }
    


  • 😃

    Es funzt!

    Vielen Dank, ich hätte fast meine Tastatur aufgefressen. Über dieses kleine Detail hat sich nämlich mein C++-Buch ("Die C++ Programmiersprache" von B. Stroustrup) ausgeschwiegen... *tilt*

    Danke und Grusz,

    Axel



  • MFK schrieb:

    "Funktioniert nicht" ist keine ausreichende Fehlerbeschreibung. "Irgendwie ganz komisch" auch nicht.

    Du sprichst mir aus der Seele. Sowas bekomm ich irgendwie zu oft zuhören 😞

    BR
    evilissimo


Anmelden zum Antworten