c++ - 未定义对 Main::playerX 的引用

标签 c++ opengl

<分区>

这是错误:

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();
}

输入.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

输入.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);
}

主要.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

主要.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有关,但我不知道该怎么做。

最佳答案

静态变量属于类而不属于该类的对象。

因此你必须像这样初始化它们(在源文件中):

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

关于c++ - 未定义对 Main::playerX 的引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33466053/

相关文章:

c++ - 输出不正确

c++ - 递归 floodFill 函数? C++

c++ - 使用 glUniformMatrix4fv() 用新矩阵更新旧矩阵?

c++ - OpenGL 不绘制三角形

c++ - OpenGL 评估器仅部分点亮

c++ - OpenGL VBO 会泄漏到 CPU RAM 吗?

c++ - Direct2D、Directx11on12 示例 VSYNC 问题

c++ - 如何在 Rust 中将绑定(bind)传递给 sqlite3?

c++ - 什么接口(interface)会将 cstrings、数组和其他类型复制到相同类型的实例?

c++ - 如何在 OpenGL 中为屏幕上的给定像素找到对应的图元或顶点