Je m'entraine à Qt et à la POO en créant un petit jeu (un combat tour par tour contre un ennemi (l'ennemi et le joueur ont les mêmes capacités mais j'ai fait hériter la classe Ennemi à la classe Joueur pour pouvoir programmer l'IA de l'adversaire grâce à un algorithme (je sais pas si c'est la bonne solution car je n'ai pas encore appris à faire une IA))mais mon débuggeur me dit "undefined reference to `vtable for Ennemi' " dans "Ennemi.cpp". Je ne suis pas très doué et je n'ai pas encore fini la partie sur Qt mais je pense que je ne m'en sors pas si mal à part ça (dites moi si j'ai fait une erreur grave). Voici mon code :
Joueur.h:
#ifndef JOUEUR_H
#define JOUEUR_H
#include "Arme.h"
#include <QObject>
class Joueur : public QObject
{
Q_OBJECT
public:
Joueur(QString nom);
void recevoirDegat(int degat);
signals:
int vieChangee(int vieActuelle);
public slots:
void attaquer(Joueur *cible);
void seSoigner();
protected:
QString m_nom;
int m_vie;
int m_potions;
Arme *m_arme;
};
#endif // JOUEUR_H
Edit: J'utilise un bouton qui ne fera rien d'autre qu'afficher du texte pour les infos parce que je ne sais pas comment faire autrement, même en regardant un peu dans la documentation.
Pas de pointeurs nu, pourquoi tu fait un pointeur alors que Arme n'est visiblement pas polymorphique ?
Tu as l'air d'avoir suivi le cours de C++ du site, tu peux recommencer un cours plus à jour couvrant les dernières normes (C++11, C++14, C++17, C++20, C++23).
Le polymorphisme et l'orienté objet se présente assez mal dans la conception d'un jeu vidéo.
S'il te plait ne code pas en français.
Pour ton problème, il semblerait qu'il manque des définitions. Probablement l'appel à moc manquant. Montre nous ton fichier .pro
- Edité par markand 9 novembre 2021 à 8:51:47
git is great because Linus did it, mercurial is better because he didn't.
Que me conseillez-vous de faire pour arranger pouvoir me servir du slot "attaquer(&ennemi)"? J'ai pensé à peut-être créer un autre slot qui émet un signal spécial utilisable par le slot, mais je me suis demandé de un, si cela ne surchargerait pas un peu trop le programme; et de deux, comment je pourrais le faire parce que la, aucune idée.
markand a écrit:
Avant de répondre à la question :
Pas de pointeurs nu, pourquoi tu fait un pointeur alors que Arme n'est visiblement pas polymorphique ?
Tu as l'air d'avoir suivi le cours de C++ du site, tu peux recommencer un cours plus à jour couvrant les dernières normes (C++11, C++14, C++17, C++20, C++23).
Le polymorphisme et l'orienté objet se présente assez mal dans la conception d'un jeu vidéo.
S'il te plait ne code pas en français.
Pour ton problème, il semblerait qu'il manque des définitions. Probablement l'appel à moc manquant. Montre nous ton fichier .pro
- Edité par markand hier à 8:51
J'ai écrit en français que parce j'étais la seule personne à coder, sinon je l'aurais mis en anglais.
J'ai remarqué qu'il était inutile d'avoir un pointeur vers un objet Arme, je l'ai donc supprimé.
Voici mon fichier .pro:
QT+=widgets
SOURCES+=\
Arme.cpp\
Ennemi.cpp\
Fenetre.cpp\
Joueur.cpp\
main.cpp
HEADERS+=\
Arme.h\
Ennemi.h\
Fenetre.h\
Joueur.h\
Merci beaucoup pour votre aide.
- Edité par Koda_be 10 novembre 2021 à 18:38:43
"undefined reference to `vtable for ...' "
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
mon github
git is great because Linus did it, mercurial is better because he didn't.