Bonjour à tous ;

vos idées seront les bienvenues , actuellement je travaille sur un jeu d'échec pour simplifier : je crée 3 classes (Case - Pièce et Pion) le plateau après juste un vector sur case . mais mon objectif c'est de pouvoir déplacer un pion (marqué P à l'affichage) d'une case vers un autre . voici le code en question :
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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
#include<iostream>
#include<string>
using namespace std;

class Case {
private:
	int x ; //ligne
	int y ; //colonne
	char etiq ; // etiquette pour savoir si c'est un pion P ou vide '_'
	
public:
		// getters et setters 
	int getX(){return x;}
	int getY(){return y;}
	void setX(int a){x = a;}
	void setY(int b){y=b;}
	void setEtiq(char C){etiq = C;}
	char getEtiq(){return etiq;}
	
	// constructeur 
	Case();
	Case(const Case& C); // constructeur par recopie je ne sais pas si la déclaration est bonne 
		Case(int lig,int col,char& etiqette);
	~Case();
	void Afficher();
	ostream& operator <<(const Case& B); // surcharge de l'operateur << afin d'afficher une case 
	
	};
	// deinition des méthodes Case 
		Case::Case():x(0),y(0),etiq('_'){}
		
			Case::Case(const Case& D){
				
				x= D.x;
				y = D.y;
				etiq = D.etiq;
				}
			Case::Case(int lig,int col,char& etiqette):x(lig),y(col),etiq(etiqette){}
				ostream& operator <<(ostream& out, Case B){
					
					out << "ligne= "<<B.getX() <<" "<<"colonne= " << B.getY() <<" "<<"etiquette= "<<B.getEtiq()<< endl;
					}
				void Case::Afficher(){
					
					cout << "renseignement sur cette case" << *this << endl ;
					}
					
			Case::~Case(){}
			
			// Class Piece 
	
class Piece {
private:
	Case* place; // je pensais qu'une pièce pointe sur une case 
		
public:
	Piece();
		~Piece();
		    void Deplacer(int ligne , int colonne,char C); // pour pouvoir le déplacer 
		    
				void DeplacerCase(const Case& B); // délacement à partir d'une case 
	
	
	};
	
	Piece::Piece(){
		place = new Case();
		}	
	Piece::~Piece(){}	
	
	void Piece::Deplacer(int ligne , int colonne , char P){
		
		place->setX(ligne);
		place->setY(colonne);
		place->setEtiq(P);
		
		}	
		
   void Piece::DeplacerCase(const Case& C1){
		int ligne1;
		ligne1 = C1.getX();
		int colonne1 = C1.getY();
		char eti = place->getEtiq();
		
		place->setX(ligne1); // on change ligne piece
		place->setY(colonne1); // on change colonne piece
		C1.setEtiq(eti); // on change l'étiquette de la case 
		
		}	
		
		// classe Pion : un pion est une pièce 
class Pion:public Piece {
	private:
		string couleur;
			char eti ;
	public:
	Pion(string noir);
	~Pion();
	void setCouleur(string N){couleur = N;}
		
	
	
	
	};
	
	Pion::Pion(string noir){
			Piece();// on fait appel au constructeur de base 
					couleur = "noir";
						eti = 'p';
			
		}

 Pion::~Pion(){}
	
// more pointers
#include <iostream>
using namespace std;

int main ()
{
	Case P1;
	Pion P2("noir");
	 
	P1.Afficher();
  
  return 0;
}
Apprendre.cpp: In function `std::ostream& operator<<(std::ostream&, Case)':
Apprendre.cpp:40: warning: control reaches end of non-void function
Apprendre.cpp: In member function `void Piece:eplacerCase(const Case&)':
Apprendre.cpp:77: error: passing `const Case' as `this' argument of `int Case::getX()' discards qualifiers
Apprendre.cpp:78: error: passing `const Case' as `this' argument of `int Case::getY()' discards qualifiers
Apprendre.cpp:83: error: passing `const Case' as `this' argument of `void Case::setEtiq(char)' discards qualifiers
Compilation échouée.


Compilation échouée.
[/CODE]

la première erreur sur non-void function pourrait passer pour le compilateur mais , mon problème c'est sur les codes en gras notamment sur les getters et setters
quand je fais
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
 
int ligne1;
ligne1 = C1.getX();
int colonne1 = C1.getY();
en quoi cela constitue une erreur ??
merci d'avance

par contre si je change la méthode comme suit :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 void Piece::DeplacerCase( Case& C1){
çà me laisse penser , quelle est la signification et la différence entre ces lignes de codes :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
 
 
(Case C1)    // c'est comme une passage par valeur j'imagine
(Case& C1)
(const Case& C1)
(const Case& C1) const :arf:
je pensais que le fait d'écrire const Case& C1) avec const devant , pour dire qu'on accepte que les objets de type Case