cast void* ->long(BaseCallback::*memberCallback)(...) nicht möglich



  • also, ich hab einen klassenrumpf, der so aussieht:

    typedef long (__stdcall *callback)(HWND hwnd,unsigned int message,unsigned int wParam,long lParam);
    class BaseCallback{
            private:
                typedef long(BaseCallback::*memberCallback)(callback oldCallback,HWND hwnd,unsigned int message,unsigned int wParam,long lParam);
    
                static long WindowProc(HWND hwnd,unsigned int message,unsigned int wParam,unsigned int lParam){
    
                    callback oldCallback=reinterpret_cast<callback>(GetProp(hwnd,"oldCallback"));//klappt
                    memberCallback newCallback=reinterpret_cast<memberCallback>(GetProp(hwnd,"newCallback"));//klappt nicht
    
                    BaseCallback* callingClass=reinterpret_cast<BaseCallback*>(GetProp(hwnd,"this"));
    
                    return callingClass->*newCallback(oldCallback,hwnd,message,wParam,lParam);//call of nonfunction
                }
                virtual long newCallback(callback oldCallback,HWND hwnd,unsigned int message,unsigned int wParam,long lParam)=0;
            public:
            //usw
        };
    

    das ist der fehler der mich ereilt:

    [C++ Error] BaseWindow.hpp(22): E2031 Cannot cast from 'void *' to 'long (BaseCallback::*)(long (__stdcall *)(void *,unsigned int,unsigned int,long),void *,unsigned int,unsigned int,long)'
    

    wisst ihr, wieso der cast von callback funktioniert, aber von membercallback nicht?
    und wieso krieg ich hinter beim benutzen der methode einen call of nonfunction error?

    //edit kann zu, hab den fehler zwar nicht gefunden, aber mir viel auf, dass ich den pointer garnicht brauch,der this zeiger bringt den doch gleich mit^^ :wand:



  • Memberzeiger sind größer als void-Zeiger.



  • ging also nur, wenn man zb auf eine struct zeigt die einen memberzeiger besitzt?



  • Zum Beispiel. Aber warum so kompliziert, mach doch einfach einen Zeiger auf einen Memberzeiger. Wenn dir das hilft ...


Anmelden zum Antworten