Funktionszeiger auf einen anderen Funktionszeiger...



  • Hallo ihr.
    Ich hab einen Funktionszeiger, der auf einen anderen Funktionszeiger zeigt!^
    Das Beispiel aus Funktionszeiger funktioniert deshalb nicht!
    Gibt es da möglichkeiten.
    Zur veranschaulichung:

    class X
    {
    public:
     X(){Fun1p=&X::Func1;};
     int (X::*Fun1p)();
    private:
     int Func1();
    };
    
    class Y
    {
    public:
     void da();
     X foo;
    };
    
    void Y::da()
    {
     funcwhichneedfp((X.*X.Fun1p)); //gibt fehler!
    }
    

    Brauche dringend hilfe.
    Bin schon am verzweifeln wegen dem Problem!
    Fehlermeldung:
    E:CodeGUISDL Versuch3mmanager.cpp(49) : error C2298: '=' : Ungueltige Operation auf einem Ausdruck mit einem Zeiger auf einen Member-Funktion

    [ Dieser Beitrag wurde am 10.06.2003 um 10:25 Uhr von stealth00 editiert. ]

    [ Dieser Beitrag wurde am 10.06.2003 um 13:07 Uhr von stealth00 editiert. ]



  • Der Körper des Konstruktors von X sollte mit einer geschweiften Klammer enden, das Semikolon kann weg. Außerdem fehlt der Stern bei der Deklaration des Funktionszeigers. Die Deklaration von Y ist nicht mit einem Semikolon abgeschlossen.



  • Jaja, sry. Schau dir mal an wann ich das gestern gepostet habe. War da schon so verzweifelt...
    Kannst mir trotzdem helfen. In dem anderen Thread hattest du die Lösung dazu.
    Mein problem ist ganz einfach das dieser dumme Fehler "Zeiger auf Zeiger einen Memberfunktion" auftritt.
    Das heisst ich darf EINMAL einen Funktionszeiger erstellen. Wenn allerdings LUA einen Funktionszeiger von der Variablen ertellen will, verreckt das ganze.
    PLZ HELP!



  • Für einen Funktionszeiger auf eine nichtstatische Memberfunktion brauchst du eine Instanz (oder einen Zeiger bzw. Referenz darauf). Praktischerweise hast du in Y schon eine: X foo. Also:

    funcwhichneedfp( foo.Fun1p );

    Wenn der Compiler das nicht schluckt, wäre es hilfreich, wenn du die Deklaration von funcwhichneedfp zeigst.



  • Also,

    lua_register(lua_CFunktion x);
    lua_CFunktion = (int*)....(lua_State *xy);
    

    allerdings verlangt lua_register eine funktion vom Typ

    __cdecl int ...(lua_State *xy);
    

    ich habe allerdings int CMenu::AddMenu(lua_State);
    Das ganze statisch deklarieren würde zwar rein theoretisch klappen (sprich ich könnte das ganze registrieren) allerdings hab ich mehrere instanzen von CMenu!
    Wie soll ich das ganze also machen?



  • sry vertippt,
    fehlermeldung lautet:

    e:\code\gui\sdl versuch3\mmanager.cpp(48) : error C2664: 'SetFunction' : Konvertierung des Parameters 3 von 'int (struct lua_State *)' in 'int (__cdecl *)(struct lua_State *)' nicht moeglich
    

    Ich hab schon versucht meine Funktion als __cdecl zu deklarieren hat aber irgendwie nix gebracht...
    Meine Klasse die ich benötige lautet MenuM und ist vom Type cMenuManager..
    Bitte helfen leute



  • schieb



  • Original erstellt von stealth00:
    **allerdings verlangt lua_register eine funktion vom Typ

    __cdecl int ...(lua_State *xy);
    

    ich habe allerdings int CMenu::AddMenu(lua_State);
    **

    Mal abgesehen davon, dass der Parameter lua_State***** sein muss, und ich nicht weiß, wie ich '...' deuten soll: Wenn lua_register eine globale (bzw. statische Member-) Funktion erwartet, dann kannst du dafür keine nichtstatische Memberfunktion verwendet, weil der Typ nicht passt.


Anmelden zum Antworten