Funktions-Pointer



  • Hi,

    meine Basisklasse ist Core::Machine, meine abgeleitete Gui::Machine. Ich brauche in der abgeleiteten Klasse Funktions-Pointer. Die Deklaration innerhalb der Klasse funktioniert auch gut:

    void (Machine::*PF)(const TreeItem*, int);
    

    Allerdings würde ich gern ein typedef (außerhalb der Klasse Gui::Machine) verwenden:

    typedef void (Gui::Machine::*PF)(const Gui::TreeItem*, int);
    

    Da beschwert sich verständlicherweise der Kompiler mit:

    error: `Gui::Machine' has not been declared
    

    Wo muss ich den typedef hinpacken, damit er funktioniert?

    Vielen Dank im Voraus

    Toru



  • So?

    namespace Gui
    {
      class Machine;
    }
    
    typedef void (Gui::Machine::*PF)(const Gui::TreeItem*, int);
    


  • David_pb schrieb:

    So?

    namespace Gui
    {
      class Machine;
    }
    
    typedef void (Gui::Machine::*PF)(const Gui::TreeItem*, int);
    

    Thx. Sieht zwar nicht so schön aus, funktioniert aber.

    Viele Grüße

    Toru



  • Toru schrieb:

    David_pb schrieb:

    So?

    namespace Gui
    {
      class Machine;
    }
    
    typedef void (Gui::Machine::*PF)(const Gui::TreeItem*, int);
    

    Thx. Sieht zwar nicht so schön aus, funktioniert aber.

    Viele Grüße

    Toru

    Das ist normale Vorgehensweise bei Funktions/Elementzeiger. Die unschöne Syntax überdeckst du ja mit dem typedef und es sieht sonst überall gut aus. 😉



  • drakon schrieb:

    Toru schrieb:

    David_pb schrieb:

    So?

    namespace Gui
    {
      class Machine;
    }
    
    typedef void (Gui::Machine::*PF)(const Gui::TreeItem*, int);
    

    Thx. Sieht zwar nicht so schön aus, funktioniert aber.

    Viele Grüße

    Toru

    Das ist normale Vorgehensweise bei Funktions/Elementzeiger. Die unschöne Syntax überdeckst du ja mit dem typedef und es sieht sonst überall gut aus. 😉

    Ich meinte nicht das typedef als unschön, sondern das Bekanntmachen der Klasse Gui::Machine. Aber wie gesagt, das "Aussehen" spielt hier wirklich keine Rolle.



  • -.-'
    Ahh,nix für ungut, nicht das ganze gelesen. 😉


Anmelden zum Antworten