所以我正在 learnopengl.com 上学习 OpenGL。为了使我的代码尽可能清晰,我决定将其分成不同的文件,并用头文件将它们连接起来。我在头文件中声明了一个外部变量shaderProgram,并在 setupShaders() 函数中定义了它。但是,当我运行代码(我使用的是 Visual Studio 2019)时,出现错误,表明该变量未定义。奇怪的是,我在同一个函数中使用这个变量,就在定义之后,它仍然不起作用。
//header.h
extern unsigned int shaderProgram;
//shader.cpp
void setupShaders(){
shaderProgram = glCreateProgram();
glAttachShader(shaderProgram, vertexShader); // error
}
显然,这是代码的一个很大的简化
您显示的代码根本不是“定义”变量。您已将其声明为extern
,并且在setupShaders()
函数中为它分配一个值,但实际上您并未为该变量定义
任何存储。您需要将其添加到您的
.cpp
文件中,例如:
标题.h
extern unsigned int shaderProgram;
着色器.cpp
unsigned int shaderProgram; // <-- HERE
void setupShaders(){
shaderProgram = glCreateProgram();
glAttachShader(shaderProgram, vertexShader);
}