Ошибка 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
также можно инициализировать внутри класс, но:
чтобы использовать этот синтаксис инициализации в классе, константа должна быть статическая константа интегрального или перечислительного типа, инициализированная константой выражение.