[c++] Jeu d'échec - Pointeurs ...
Fermé
timon44
Messages postés
53
Date d'inscription
dimanche 28 décembre 2008
Statut
Membre
Dernière intervention
17 décembre 2010
-
22 févr. 2010 à 17:02
Char Snipeur Messages postés 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 - 3 mars 2010 à 08:08
Char Snipeur Messages postés 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 - 3 mars 2010 à 08:08
A voir également:
- [c++] Jeu d'échec - Pointeurs ...
- 94 jeu - Télécharger - Puzzle & Réflexion
- Mode sans echec - Guide
- Ps4 mode sans echec - Guide
- Jeu zuma - Télécharger - Jeux vidéo
- Jeu 94 degrés - Télécharger - Divers Jeux
5 réponses
Char Snipeur
Messages postés
9813
Date d'inscription
vendredi 23 avril 2004
Statut
Contributeur
Dernière intervention
3 octobre 2023
1 298
22 févr. 2010 à 17:14
22 févr. 2010 à 17:14
Salut.
Sans les .h, difficile de répondre. As tu pensé à déclarer ta fonction virtuelle ?
Ton code est bien aéré et clair, mais pour la lecture à l'écran de ce site : trop de retours à la ligne, du coup on s'y perd un peu.
Sans les .h, difficile de répondre. As tu pensé à déclarer ta fonction virtuelle ?
Ton code est bien aéré et clair, mais pour la lecture à l'écran de ce site : trop de retours à la ligne, du coup on s'y perd un peu.
timon44
Messages postés
53
Date d'inscription
dimanche 28 décembre 2008
Statut
Membre
Dernière intervention
17 décembre 2010
4
22 févr. 2010 à 17:58
22 févr. 2010 à 17:58
ma fonction virtuelle ? quezako ? je ne connais pas ...
sinon voici les h :
piece
echiquier
case
et enfin pion
sinon voici les h :
piece
#ifndef DEF_PIECE #define DEF_PIECE #include <iostream> #include <string> using namespace std; class Piece { public: Piece(); //~Piece(); char getCouleur(); void setCouleur(char couleur); int getPosLigne(); int getPosCol(); void setPosLigne(int ligne); void setPosCol(int col); string getNom(); void setNom(string nomp); protected: char m_couleur; int m_posLigne; int m_posCol; string m_nom; }; #endif
echiquier
#ifndef DEF_ECHI #define DEF_ECHI #include <iostream> #include <string> #include "case.h" using namespace std; class Echiquier { public: Echiquier(); protected: string m_nomPiece; Case casePlateau; }; #endif
case
#ifndef DEF_CASE #define DEF_CASE #include "piece.h" #include "pion.h" class Case { public: Case(); //constructeur // destructeur ? void setPiece(Piece nomPiece); Piece getPiece(); protected: // Joueur *m_joueur; Piece *m_piece; //pointeur vers une piece }; #endif
et enfin pion
#ifndef DEF_PION #define DEF_PION #include <iostream> #include <string> #include "piece.h" using namespace std; class Pion : public Piece { public: Pion(); string getNom(); void setNom(string nomp); private: string m_nom; }; #endif
Char Snipeur
Messages postés
9813
Date d'inscription
vendredi 23 avril 2004
Statut
Contributeur
Dernière intervention
3 octobre 2023
1 298
23 févr. 2010 à 08:07
23 févr. 2010 à 08:07
Tu utilises l'héritage sans utiliser le polymorphisme, c'est dommage.
Le mieux c'est que tu te renseigne sur le polymorphisme, l'héritage et les fonctions virtuelles (virtual) en C++, je ne vais pas te refaire un cours ;-)
Dans ton programme Piece ET Pion ont toutes les deux un membre nommé m_nom (Piece::m_nom et Pion::m_nom), si tu ne déclares pas ta fonction getNom() virtuelle dans Piece, il ira chercher la fonction Piece::getNom (et donc Piece::m_nom) plutôt que la fonction Pion::getNom() (et donc Pion::m_nom).
Le mieux c'est que tu te renseigne sur le polymorphisme, l'héritage et les fonctions virtuelles (virtual) en C++, je ne vais pas te refaire un cours ;-)
Dans ton programme Piece ET Pion ont toutes les deux un membre nommé m_nom (Piece::m_nom et Pion::m_nom), si tu ne déclares pas ta fonction getNom() virtuelle dans Piece, il ira chercher la fonction Piece::getNom (et donc Piece::m_nom) plutôt que la fonction Pion::getNom() (et donc Pion::m_nom).
timon44
Messages postés
53
Date d'inscription
dimanche 28 décembre 2008
Statut
Membre
Dernière intervention
17 décembre 2010
4
2 mars 2010 à 17:58
2 mars 2010 à 17:58
ok merci ! voila une chose de plus que j'ai compris !
le problème c'est que ça ça n'affiche rien :
std::cout << (casePlateau[2][1].getPiece()).getNom() << std::endl;
alors que ça oui
std::cout << PN1.getNom() << std::endl;
Pourtant PN1 devrait être dans casePlateau[2][1] ...
le problème c'est que ça ça n'affiche rien :
std::cout << (casePlateau[2][1].getPiece()).getNom() << std::endl;
alors que ça oui
std::cout << PN1.getNom() << std::endl;
Pourtant PN1 devrait être dans casePlateau[2][1] ...
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Char Snipeur
Messages postés
9813
Date d'inscription
vendredi 23 avril 2004
Statut
Contributeur
Dernière intervention
3 octobre 2023
1 298
3 mars 2010 à 08:08
3 mars 2010 à 08:08
ça c'est surement parceque tu stockes un objet et nom un pointeur.
Si tu fais en sorte que l'appel se transforme en :
(casePlateau[2][1].getPiece())->getNom()
alors ça devrais fonctionner.
Si tu fais en sorte que l'appel se transforme en :
(casePlateau[2][1].getPiece())->getNom()
alors ça devrais fonctionner.