Ошибка LNK2001 при доступе к статическим переменным 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();
}

может кто-нибудь объяснить эту ошибку.

2 ответов


статический член должен быть определен вне тела класса, поэтому вы должны добавить определение и предоставить инициализатор там:

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

также можно инициализировать внутри класс, но:

чтобы использовать этот синтаксис инициализации в классе, константа должна быть статическая константа интегрального или перечислительного типа, инициализированная константой выражение.


добавить это:

GLuint Platform::tex_plat;

после объявления класса.