Доступ статической функции к члену класса

Заголовок класса:

#ifndef _APP_H_
#define _APP_H_

#include "glut.h"#include "Declare.h"

class App {
private:
static float angle;

public:

App();
int OnExecute();
void OnLoop();
static void OnRender();
bool OnInit();
void OnCleanup();
static void OnResize(int w, int h);};#endif

Мое определение OnRender является

#include "App.h"
App::App() {
angle = 0.0f;
}

void App::OnRender() {
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
glLoadIdentity();

gluLookAt( 0.0f, 0.0f, 10.0f,
0.0f, 0.0f, 0.0f,
0.0f, 1.0f, 0.0f);
glRotatef(angle, 0.0f, 1.0f, 0.0f);

glBegin(GL_TRIANGLES);
glVertex3f(-2.0f,-2.0f,0.0f);
glVertex3f(2.0f,0.0f,0.0f);
glVertex3f(0.0f,2.0f,0.0f);
glEnd();

angle+=0.1f;

glutSwapBuffers();
}

Ошибка:

1>App.obj : error LNK2001: unresolved external symbol "private: static float App::angle" (?angle@App@@0MA)
1>App_OnRender.obj : error LNK2019: unresolved external symbol "private: static float App::angle" (?angle@App@@0MA) referenced in function "public: static void __cdecl App::OnRender(void)" (?OnRender@App@@SAXXZ)

Как-то связано с тем, как я ссылаюсь на статическую переменную внутри статической функции. Если я не объявляю угол как static float angle тогда я конечно не могу получить к нему доступ через static void OnRender(), Я должен добавить больше деталей. Если я не объявляю это как статическое, я получаю эту ошибку illegal reference to non-static member App::angle

1

Решение

В исходном файле App.cpp вам нужно определять ваша статическая переменная:

static float App::angle = 0; //0 is my test default value. use yours

и если вы хотите использовать angle в нестатическом методе вы может хотите использовать экземпляр класса с App:angle, Например :

App::App() {
App::angle = 0.0f;
}
3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]