2015-11-01 4 views
0

Это ошибка:Неопределенная ссылка на главную :: PlayerX

undefined reference to `Main::playerX' 

Может кто-нибудь объяснить, почему это дает ошибку?

main.cpp (основная функция):

#include <GL/glut.h> 
#include "Input.h" 
#include "Main.h" 
Input inputClass; 
Main mainClass; 

int main (int argc, char **argv) { 
    glutInit(&argc, argv); 
    glutInitDisplayMode (GLUT_DOUBLE); 
    glutInitWindowSize (800, 600); 
    glutInitWindowPosition (100, 100); 
    glutCreateWindow ("Your first OpenGL Window"); 
    glutDisplayFunc(mainClass.display); 
    glutMainLoop(); 
} 

Input.h:

#ifndef INPUT_H 
#define INPUT_H 

class Input 
{ 
    public: 
     Input(); 
     static void SpecialDown(int key, int x, int y); 
     static void returnSpeed(float speed); 
}; 

#endif // INPUT_H 

Input.cpp:

#include "Input.h" 
#include <GL/glut.h> 
#include <GL/glu.h> 
#include "Main.h" 
Main mainClass2; 
Input::Input() 
{ 
    //ctor 
} 

void Input::SpecialDown(int key, int x, int y){ 
    switch(key){ 
     case GLUT_KEY_UP: 
      returnSpeed(0.0f); 
      break; 
     case GLUT_KEY_DOWN: 
      returnSpeed(0.0f); 
      break; 
     case GLUT_KEY_LEFT: 
      returnSpeed(-0.005f); 
      break; 
     case GLUT_KEY_RIGHT: 
      returnSpeed(0.005f); 
      break; 
    } 
    //glutPostRedisp(); 
} 

void Input::returnSpeed(float speed){ 
    mainClass2.test(speed); 
} 

main.h:

#ifndef MAIN_H 
#define MAIN_H 


class Main{ 
    public: 
     Main(); 
     static void reshape(int width, int height); 
     static void display(); 
     void changeSpeed(float speed); 
     static float playerX; 
     void test(float kip); 
     static float playerSpeed; 
}; 

#endif // MAIN_H 

main.cpp:

#include "Main.h" 
#include "Input.h" 
#include <GL/glut.h> 
#include <GL/glu.h> 
Main::Main(){ 
    playerX = 0.0f; 
} 
Input input; 

///HERE EVERYTHING IS BEING RENDERED 
void Main::display(){ 
    ///BACKGROUND COLOR 
    glClearColor(0.3f, 0.3f, 2.0f, 1.0f); 
    glClear(GL_COLOR_BUFFER_BIT); 
    ///LOAD THE IDENTITY MATRIX FOR THE DRAWING 
    glLoadIdentity(); 
    glTranslatef(0.0f, 0.0f, -5.0f); 

    ///THE GROUND 
    glBegin(GL_QUADS); 
     glColor3f(0.5f,2.0f,0.5f); 
     glVertex2f(-5.0f,-4.0f); 
     glVertex2f(-5.0f,-1.0f); 
     glVertex2f(10.0f,-1.0f); 
     glVertex2f(10.0f,-4.0f); 
    glEnd(); 

    glTranslatef(playerX,0.0f,0.0f); 
    glBegin(GL_QUADS); 
     glColor3f(1.0f,0.0f,0.0f); 
     glVertex2f(-3.0f,-1.0f); 
     glVertex2f(-3.0f,-0.5f); 
     glVertex2f(-2.5f,-0.5f); 
     glVertex2f(-2.5f,-1.0f); 
    glEnd(); 

    ///SWAP THE BUFFERS FOR SMOOTH RENDERING 
    glutSwapBuffers(); 
    playerX += playerSpeed; 
} 

void Main::test(float kip){ 
} 

Вероятно, это связано со статической переменной PlayerX, но я не знаю, что делать.

ответ

2

Статические переменные относятся к классу не к объектам этого класса.

Поэтому вы должны инициализировать их, как так (в исходном файле):

... 
Main::Main() {} 
float Main::playerX = 0.0; 
... 
+0

в главном файле заголовка? – OpenGLmaster1992

+0

@HugoCornel В исходном файле – Patryk

Смежные вопросы