[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 9688 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 2 octobre 2020 - 3 mars 2010 à 08:08
Char Snipeur Messages postés 9688 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 2 octobre 2020 - 3 mars 2010 à 08:08
A voir également:
- [c++] Jeu d'échec - Pointeurs ...
- Mode sans echec - Guide
- Ps4 mode sans echec - Guide
- Jeu zuma - Télécharger - Jeux vidéo
- Google jeu - Guide
- Regle du jeu uno extreme ✓ - Forum Loisirs / Divertissements
5 réponses
Char Snipeur
Messages postés
9688
Date d'inscription
vendredi 23 avril 2004
Statut
Contributeur
Dernière intervention
2 octobre 2020
1 328
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
9688
Date d'inscription
vendredi 23 avril 2004
Statut
Contributeur
Dernière intervention
2 octobre 2020
1 328
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
9688
Date d'inscription
vendredi 23 avril 2004
Statut
Contributeur
Dernière intervention
2 octobre 2020
1 328
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.