访问静态变量时的错误

LNK2001 error when accessing static variables C++

本文关键字:错误 变量 静态 访问      更新时间:2023-10-16

我试图在我的代码中使用静态变量时,试图使用纹理,但我一直得到这个错误:

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;