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 ...