bonjour à tous
voila je débute en c++ et je suis actuellement en train de faire un petit jeu d'échec avec qt
j'en suis à la définition des classes et je rencontre déja un problème
j'ai une classe pièces et 7 classes pion, cavalier,... qui dérive de celle ci
toutes les données sont contenus dans pièces, les sous-classes n'ont pas de propriété spécifiques. Ce qui est spécifique aux sous-classes est la méthode déplacer(). j'ai donc déclaré dans piece la méthode deplacer() comme virtual.
J'ai aussi déclaré le destructeur comme virtual, comme indiqué sur le site (ou un autre je sais plus.
avant de vous montrer le code je vous montre tous les warnings et erreurs que ca me provoque:
maintenant le code de la sur classe
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 //warning undefined reference to `tour::~tour()' undefined reference to `tour::~tour()' undefined reference to `vtable for pieces' //des undefined comme ca y en a 80 //1 erreur :-1: error: collect2: ld returned 1 exit status
pieces.h
pieces.cpp
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28 #ifndef PIECE_H #define PIECE_H #include "cases.h" #include <QString> #include <QIcon> class pieces { public: pieces(int j, int w, int z); int getnomjoueur(); virtual QString deplacer(cases *c); QIcon geticone(); void seticon(QIcon ic); int getx(); int gety(); virtual ~pieces(); protected: QIcon icone; int nomJoueur; int x; int y; }; #endif // PIECE_H
et un exemple d'une sous-classe
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 #include "pieces.h" //l'icone n'est pas renseigné dans le constructeur car il résulte d'un test dasn la sous-clase //cette icone n'est donc pas connu lors de l'appel au constructeur de pièces pieces::pieces(int j,int w, int z) { nomJoueur = j; x=w; y=z; } QIcon pieces::geticone(){return icone;} int pieces::getnomjoueur() {return nomJoueur;} int pieces::getx(){return x;} int pieces::gety(){return y;}
cavalier.h
cavalier.cpp
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 #ifndef CAVALIER_H #define CAVALIER_H #include <QString> #include "cases.h" #include "pieces.h" class cavalier:public pieces { public: cavalier(int j, int w, int z); QString deplacer(cases *c); ~cavalier(); }; #endif // CAVALIER_H
voila je sais plus trop quoi faire, je suis un peu paumé dans mon héritage, j'ai un peu tout essayé, virtual pas virtual, déclarer le constructeur dans le cpp pas le déclarer,... merci d'avance pour vos réponses
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 #include "cavalier.h" cavalier::cavalier(int j,int w, int z):pieces(j,w,z) { QString i; if (j==1) i="image/cavb.png"; else i="image/cavn.png"; //icone est une propriete de pieces, peut etre que je n'ai pas le droit??? icone=QIcon(i); } QString cavalier::deplacer(cases *c) { return ""; }
Partager