2015-11-01 51 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