Bonjour a tous,

Il m'est demande de programmer un objet Echiquier qui contient une fonction charger(), censee lire un fichier .txt de 8 lignes de 8 caracteres.

En fonction des caracteres, je remplis mon objet Echiquier avec des Pieces. L'Echiquier contient un attribut qui est un vecteur de Pieces, Pieces etant un objet abstrait avec comme filles concretes Pion, Roi et Cavalier.

Voici la fonction charger que j'ai faite:

Echiquier.cxx
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
 
void Echiquier::charger (std::string nomfichier)
{
	std::ifstream fichier (nomfichier.c_str()); //Fallait le savoir!!!
 
	if (fichier)
	{
		std::string contenu;
		int num_ligne = 0;
		int num_colonne = 0;
		while (std::getline(fichier,contenu))
		{
			std::string::iterator it;
			num_colonne=0;
			for (it=contenu.begin(); it!=contenu.end(); it++)
			{
				std::cout<<"num_ligne="<<num_ligne<<", num_colonne="<<num_colonne<<" et *it="<<(*it)<<std::endl;
				if ((*it)=='.')
				{
 
				}
				if ((*it)=='p')
				{
					static Pion pi = *(new Pion("blanc",*(new Position(num_ligne,num_colonne))));
					static Piece* p = &pi;
					ajouter(p);
				}
				if ((*it)=='c')
				{
					static Cavalier pi = *(new Cavalier("blanc",*(new Position(num_ligne,num_colonne))));
					static Piece* p = &pi;
					ajouter(p);
				}
				if ((*it)=='r')
				{
					static Roi pi = *(new Roi("blanc",*(new Position(num_ligne,num_colonne))));
					static Piece* p = &pi;
					ajouter(p);
				}
				if ((*it)=='P')
				{
					static Pion pi = *(new Pion("noir",*(new Position(num_ligne,num_colonne))));
					static Piece* p = &pi;
					ajouter(p);
				}
				if ((*it)=='C')
				{
					static Cavalier pi = *(new Cavalier("noir",*(new Position(num_ligne,num_colonne))));
					static Piece* p = &pi;
					ajouter(p);
				}
				if ((*it)=='R')
				{
					static Roi pi = *(new Roi("noir",*(new Position(num_ligne,num_colonne))));
					static Piece* p = &pi;
					ajouter(p);
				}
				num_colonne++;
			}
			num_ligne++;
		}
		fichier.close();
	}
	else
	{
		std::cout<<"Impossible d'ouvrir le fichier"<<std::endl;
	}
}
Probleme: Evidemment, des que la fonction se termine, les Pieces disparaissent donc mon echiquier est vide...

Le rajout du mot static m'a permis de voir que c'est bien ca le probleme, mais comme vous pouvez vous en douter, ca ne resout pas le probleme. Je crois qu'il faille que je declare un vecteur<Piece*> comme variable globale, mais je ne sais pas ou le mettre et comment le faire.

Si quelqu'un a une idee, merci d'avance.