Funktionspointer bei verschiedenen Klassen



  • Hallo,

    ich versuche mich gerade mit http://www.newty.de/fpt/index.html in Funktionspointer einzuarbeiten und ohne Klassen ist das auch noch schön einfach.
    Nun stehe ich aber vor dem Problem, was ich machen muss, wenn ich zwei verschiedene Klassen A und B habe, die die gleiche Unterklasse Sub haben, welche wiederum eine Funktion MachWas() enthält, die eine Funktion bar() des jeweiligen Besitzers aufrufen soll.

    Also etwa so:

    class Sub{
        void foo( void(*fkt)() );
    };
    
    class A{
        Sub sub;
        void foo();
        void bar();
    };
    
    class B{
        Sub sub;
        void foo();
        void bar();
    };
    
    void Sub::MachWas( void (*fkt)() ){
        fkt();
    }
    
    void A::foo(){
        sub.MachWas( &A::bar() );
    }
    
    void B::foo(){
        sub.MachWas( &B::bar() );
    }
    

    Wenn ich die Fehlermeldung von g++ richtig verstehe, ist void() etwas anderes als z.B. void A::(), d.h. ich müßte in die Parameterliste von MachWas() noch einbauen, aus welcher Klasse, bzw. von welchem Objekt der Aufruf kommt. Könnte mir jemand dazu bitte einen Rat geben?

    Fehlermeldung von g++ schrieb:

    test.cpp:23: error: no matching function for call to 'Sub::MachWas(int, void (A::) (int))
    test.cpp:18: note: candidates are: int Sub::MachWas(int, void (
    ) (int))

    Viele Grüße, Chris



  • Ähm, sorry, Sub sieht natürlich so aus

    class Sub{
        void MachWas( void(*fkt)() );
    };
    

    🙄



  • Memberfunktions-Zeiger sind leider ein wenig schwieriger als einfache Funktionszeiger. Ich empfehle die boost-Bibliothek und daraus boost::function 🙂
    edit: http://www.boost.org/doc/libs/1_38_0/doc/html/function/tutorial.html#id3171589


Log in to reply