访问静态变量时的错误
LNK2001 error when accessing static variables C++
我试图在我的代码中使用静态变量时,试图使用纹理,但我一直得到这个错误:
1>Platform.obj : error LNK2001: unresolved external symbol "private: static unsigned int Platform::tex_plat" (?tex_plat@Platform@@0IA)
我已经在cpp文件中正确初始化了变量,但是我相信当试图在另一种方法中访问它时,会发生此错误。
. h
class Platform :
public Object
{
public:
Platform(void);
~Platform(void);
Platform(GLfloat xCoordIn, GLfloat yCoordIn, GLfloat widthIn);
void draw();
static int loadTexture();
private:
static GLuint tex_plat;
};
. cpp类:这是变量初始化的地方
int Platform::loadTexture(){
GLuint tex_plat = SOIL_load_OGL_texture(
"platform.png",
SOIL_LOAD_AUTO,
SOIL_CREATE_NEW_ID,
SOIL_FLAG_INVERT_Y
);
if( tex_plat > 0 )
{
glEnable( GL_TEXTURE_2D );
return tex_plat;
}
else{
return 0;
}
}
然后我希望在这个方法中使用tex_plat值:
void Platform::draw(){
glBindTexture( GL_TEXTURE_2D, tex_plat );
glColor3f(1.0,1.0,1.0);
glBegin(GL_POLYGON);
glVertex2f(xCoord,yCoord+1);//top left
glVertex2f(xCoord+width,yCoord+1);//top right
glVertex2f(xCoord+width,yCoord);//bottom right
glVertex2f(xCoord,yCoord);//bottom left
glEnd();
}
静态成员必须在类体之外定义,因此必须在那里添加定义并提供初始化式:
class Platform :
public Object
{
public:
Platform(void);
~Platform(void);
Platform(GLfloat xCoordIn, GLfloat yCoordIn, GLfloat widthIn);
void draw();
static int loadTexture();
private:
static GLuint tex_plat;
};
// in your source file
GLuint Platform::tex_plat=0; //initialization
也可以在你的类中初始化它,但是:
要使用类内初始化语法,常量必须是a由常量初始化的整型或枚举类型的静态常量表达式。
add this:
GLuint Platform::tex_plat;
相关文章:
- 提升错误:变量"TimeSpec RQTP"具有初始值设定项,但类型不完整
- C++ SPDLOG 编译错误:变量或字段"set_error_handler"声明为无效
- 错误 - 变量类型 "X" 是一个抽象类 - c++
- 带有 std::map 的模板函数给出错误:变量或字段声明为 void
- C 错误变量大小对象可能不会初始化
- 我收到错误"变量类型不完整"无效,我找不到问题所在
- C++以友元身份重载 ostream 运算符会导致错误:变量在此上下文中是私有的
- 错误:变量未在此范围内声明
- 错误:变量未在此范围 C++ 中声明
- 无法访问获取错误变量
- C++错误"变量或字段声明为无效"
- 错误:变量需要堆栈帧
- VS2010 中 C++ lambda 表达式的奇怪错误(变量 y1 )
- 我不断收到错误"变量'b'未初始化正在使用,我不确定如何解决它
- 如何更正运行时错误变量周围的堆栈已损坏
- 错误变量受保护
- 线程池的 lambda 函数内的编译器错误变量"未捕获"
- 接收错误变量的类型不完整"void"
- 运行时错误-变量arr_processes周围的堆栈已损坏
- 错误:变量未在此范围内声明