短代码如下:
#include <windows.h>
#include <GL/gl.h>
#include <GL/glext.h>
int main(int argc, char** argv)
{
PFNGLBINDPROGRAMARBPROC glBindProgramARB;
glBindProgramARB=(PFNGLBINDPROGRAMARB)wglGetProcAddress("glBindProgramARB");
}
编译时出现编译错误:error C2065: 'PFNGLBINDPROGRAMARB' : undeclared identifier.
我检查了头文件glext.h,但PFNGLBINDPROGRAMARBPROC
就在其中(第2922行)。我不知道所以在这里发表我的问题寻求帮助。
我使用Visual Studio 2012并检查了include目录设置。其他系统信息:Windows 7 64位,安装了最新驱动程序的nVidia Geforce卡。如果您需要任何其他相关信息,请询问。
它是编译错误,而不是链接错误,因此它与扩展函数glBindProgramARB的存在无关(它确实存在于我的系统中,我使用glutGetProcAddress检查过)。
我知道FreeGlut和GLEW库函数可以帮助我做同样的事情。但我只是想知道为什么上面的代码无法通过编译器以及如何修复它。
答案 0 :(得分:2)
PFNGLBINDPROGRAMARBPROC
已定义,但PFNGLBINDPROGRAMARB
未定义。您在声明中使用这两个中的第一个,但在类型转换中使用第二个:
PFNGLBINDPROGRAMARBPROC glBindProgramARB;
glBindProgramARB=(PFNGLBINDPROGRAMARB)wglGetProcAddress("glBindProgramARB");