ошибка LNK2001 - при использовании этого ключевого слова

Я получаю сообщение об ошибке компоновщика при использовании ключевого слова this:

Ошибка 1 ошибка LNK2001: неразрешенный внешний символ "public: virtual void __thiscall GameObject::update(void)" (?update@GameObject@@UAEXXZ) Преобразование Main.obj Pong C++

это код

class GOBall: public GameObject
{
public:
    static const GLint SIZE;
    static const GLfloat MAX_SPEEDX;
    static const GLfloat MAX_SPEEDY;
    static const GLfloat DAMPING;
    GLfloat velX;
    GLfloat velY;
    GLfloat startX;
    GLfloat startY;
    GOBall(GLfloat x, GLfloat y);
    void update();
    void reverseX(GLfloat center);
    void reverseY();
    void resetPosition();
};
const GLfloat GOBall::DAMPING = 0.05f;
const GLfloat GOBall::MAX_SPEEDX = 4;
const GLfloat GOBall::MAX_SPEEDY = 8;
const GLint GOBall::SIZE = 16;
GOBall::GOBall(GLfloat x, GLfloat y)
{
    this->x = x;//The Error appeared after filling in this function
    this->y = y;

    this->sx = SIZE;
    this->sy = SIZE;
    startX = x;
    startY = y;
    velX = -MAX_SPEEDX;
    velY = 0;
}

Переменная x находится в классе GameObject.

class GameObject
 {
protected:
    GLfloat x, y,sx, sy;
public:
    virtual void update();
    void render();
    GLfloat getX();
    GLfloat getY();
    GLfloat getSX();
    GLfloat getSY();
    GLfloat getCenterY();
};

Как некоторые люди могут заметить, я пытался воссоздать приложение Java Pong с помощью этих руководств, чтобы улучшить свои знания в OpenGL и C++ https://www.youtube.com/playlist?list=PL513808FE7D9A5D68.

И я знаю, что, вероятно, проще реализовать эту игру в файлах заголовков/cpp, но я не понимаю, какой заголовок класса включить первым, потому что есть четыре класса GameObject, и у них есть переменные, летающие повсюду между их экземплярами.


person Da_Boom    schedule 12.05.2014    source источник


Ответы (1)


Эта ошибка обычно означает, что вы забыли реализовать функцию (или пропустили библиотеку), и обычно появляется только тогда, когда это необходимо.

В данном случае это означает, что метод GameObject::update() (метод update корня GameObject) не реализован. если он должен быть абстрактным, добавьте =0 после объявления:

class GameObject
 {
protected:
    GLfloat x, y,sx, sy;
public:
    virtual void update()=0;
    void render();
    GLfloat getX();
    GLfloat getY();
    GLfloat getSX();
    GLfloat getSY();
    GLfloat getCenterY();
};
person ratchet freak    schedule 12.05.2014
comment
Ааа, это работает, я хочу поблагодарить вас... теперь я хочу знать, почему это... установка на 0? это не имеет смысла... - person Da_Boom; 12.05.2014
comment
@Da_Boom означает, что он не реализован, и вы не можете создать экземпляр GameObject, а подклассы несут ответственность за обеспечение реализации. - person ratchet freak; 12.05.2014