2014-05-12 3 views
0

Je reçois une erreur de liens lorsque vous utilisez le this mot-clé:erreur LNK2001 - tout en utilisant le mot clé this

Erreur 1 erreur LNK2001: symbole externe non résolu "public: virtual void __thiscall gameobject :: update (void)" (? mise à jour @ gameobject @@ UAEXXZ) Main.obj Pong C++ Conversion

c'est le code

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

la variable x est dans la classe 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(); 
}; 

Comme certaines personnes peuvent remarquer que j'ai essayé de recréer l'application Java Pong via ces tutoriels afin de mieux mes connaissances en OpenGL et C++ https://www.youtube.com/playlist?list=PL513808FE7D9A5D68

Et je sais qu'il ya probablement plus facile à mettre en œuvre ce jeu dans les fichiers header/cpp mais je suis confus sur l'en-tête de classe à inclure en premier, car il y a quatre classes GameObject et ils ont des variables qui volent partout entre leurs instances

Répondre

0

Cette erreur signifie généralement que vous avez oublié d'implémenter une fonction (ou manqué une bibliothèque), et n'apparaît généralement que lorsque cela est nécessaire.

Dans ce cas, cela signifie que la méthode GameObject::update() (la méthode update de la racine GameObject) n'est pas implémentée. si elle est censée être abstraite, puis ajouter un =0 derrière la déclaration:

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

Ahh qui fonctionne, je tiens à vous remercier ... maintenant je veux savoir pourquoi c'est ... la mise à 0? ça donne du sens ... –

+0

@Da_Boom cela signifie qu'il n'est pas implémenté et que vous ne pouvez pas instancier un 'GameObject' et que les sous-classes sont chargées de fournir l'implémentation –