这是我制作的OpenGL应用程序的代码。我有以下的代码产生访问冲突(声明:我只公布有关该问题的代码):当访问对象属性/方法时,通过它们访问对象属性/方法时,全局指向对象的全局指针会破坏程序
// file: myHeader.h class MyClass{ int classAttribute; public: void myClassFunction(); bool CreateGLWindow(); friend LRESULT CALLBACK WndProc(HWND hWnd,UINT uMsg,WPARAM wParam,LPARAM lParam); MyClass(); ~MyClass(); } //file: myHeader.cpp bool MyClass::CreateGLWindow(){ WNDCLASS wc; wc.lpfnWndProc = (WNDPROC) WndProc; } void MyClass::myClassFunction(){ // do stuff } MyClass::MyClass(void){ CreateGLWindow(); } //file main.cpp #include myHeader.h MyClass *p; LRESULT CALLBACK WndProc(HWND hWnd,UINT uMsg,WPARAM wParam,LPARAM lParam) { if (p->classAttribute){ p->myClassFunction(); } } int main(){ MyClass obj; p = &obj; BOOL done=FALSE; while(!done) { if (PeekMessage(&msg,NULL,0,0,PM_REMOVE))// Is There A Message Waiting? { if (msg.message==WM_QUIT) // Have We Received A Quit Message? { done=TRUE; } else // If Not, Deal With Window Messages { TranslateMessage(&msg); DispatchMessage(&msg); } } else // If There Are No Messages { // Draw The Scene. Watch For ESC Key And Quit Messages From DrawGLScene() if (obj.active) // Program Active? { if (obj.keys[VK_ESCAPE]) { done=TRUE; } else // Not Time To Quit, Update Screen { DrawGLScene(); obj.Swap(); // Swap Buffers (Double Buffering) } } if (obj.keys[VK_F1]) { obj.keys[VK_F1]=FALSE; if (!obj.changeScreenMode()) { return 0; // Quit If Window Was Not Created } } } } } }
我所得到的是一个访问冲突就行p->classAttribute
和调试表明属性并且p的方法不能被评估。
任何帮助将不胜感激。
您需要从“//最终将调用WndProc的代码”添加更多代码。调用发生的时候'p'可能无效(实际上它不是有效的...访问冲突),所以我们需要在调用之前看看你在做什么。 – Dennis 2011-04-15 09:38:44
@丹尼斯根据您的要求更新了 – 2011-04-15 09:55:37
您的课后缺少';',但我认为这是复制/粘贴/输入错误。 :) – Xeo 2011-04-15 09:59:04