C/C++ Probleme iste chainee
Fermé
juju
-
19 déc. 2006 à 12:57
Char Snipeur Messages postés 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 - 21 déc. 2006 à 09:39
Char Snipeur Messages postés 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 - 21 déc. 2006 à 09:39
6 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
19 déc. 2006 à 16:07
19 déc. 2006 à 16:07
Salut.
déjà on a un bou du code seulement, donc difficle de t'aider.
entre autre "iflect" est de quel type?
Le compilateur te dit que l'opérateur "<<" entre les deux type utiliser n'ai pas défini, ou est ambigüe.
en effet, tu peux lui dire a=torchon+serviette mais si tu ne lui dit pas comment aditionner les torchons et les serviette, il ne peut pas deviner.
déjà on a un bou du code seulement, donc difficle de t'aider.
entre autre "iflect" est de quel type?
Le compilateur te dit que l'opérateur "<<" entre les deux type utiliser n'ai pas défini, ou est ambigüe.
en effet, tu peux lui dire a=torchon+serviette mais si tu ne lui dit pas comment aditionner les torchons et les serviette, il ne peut pas deviner.
voila mon code :
char tmp;
char caractere;
struct cellule *pTemp;
pTemp = joueur1.pliste_chainee;
//on rajoute .txt à la fin de nom.joueur
strcat (joueur1.nom, "tirs.txt");
//on ouvre le fichier joueur1.nom.txt en lecture
ifstream iflect(joueur1.nom);
do
{
caractere = '.';
iflect>>tmp;//permet de passer les caracteres '<' et '>'
iflect>>(*pTemp).ligne;
iflect>>tmp;
iflect>>tmp;
iflect>>(*pTemp).colonne;
iflect>>tmp;
iflect>>tmp;
iflect>>(*pTemp).resultat;
iflect>>tmp;
iflect>>tmp;
iflect>>(*pTemp).suivant;
iflect>>tmp;
if ((*pTemp).resultat == 1)
caractere = 'X';
joueur1.mes_tirs[(*pTemp).ligne][(*pTemp).colonne] = caractere;
pTemp = (*pTemp).suivant;
}
while ((pTemp)!= 0);
//On ferme le fichier
iflect.close();
char tmp;
char caractere;
struct cellule *pTemp;
pTemp = joueur1.pliste_chainee;
//on rajoute .txt à la fin de nom.joueur
strcat (joueur1.nom, "tirs.txt");
//on ouvre le fichier joueur1.nom.txt en lecture
ifstream iflect(joueur1.nom);
do
{
caractere = '.';
iflect>>tmp;//permet de passer les caracteres '<' et '>'
iflect>>(*pTemp).ligne;
iflect>>tmp;
iflect>>tmp;
iflect>>(*pTemp).colonne;
iflect>>tmp;
iflect>>tmp;
iflect>>(*pTemp).resultat;
iflect>>tmp;
iflect>>tmp;
iflect>>(*pTemp).suivant;
iflect>>tmp;
if ((*pTemp).resultat == 1)
caractere = 'X';
joueur1.mes_tirs[(*pTemp).ligne][(*pTemp).colonne] = caractere;
pTemp = (*pTemp).suivant;
}
while ((pTemp)!= 0);
//On ferme le fichier
iflect.close();
Char Snipeur
Messages postés
9813
Date d'inscription
vendredi 23 avril 2004
Statut
Contributeur
Dernière intervention
3 octobre 2023
1 298
20 déc. 2006 à 13:13
20 déc. 2006 à 13:13
Houla ! je croi comprendre ce que tu veux faire !
iflect>>(*pTemp).suivant;
sachant que suivant est un pointeur sur cellule, comme le compilo devine comment remplir la struct cellule???
tu ne peux écrire sans créer l'opérateur que des types primitif, ou usuel (STL)
Je pense comprendre ce que tu veux faire par cette commande, mais explique moi quand même.
iflect>>(*pTemp).suivant;
sachant que suivant est un pointeur sur cellule, comme le compilo devine comment remplir la struct cellule???
tu ne peux écrire sans créer l'opérateur que des types primitif, ou usuel (STL)
Je pense comprendre ce que tu veux faire par cette commande, mais explique moi quand même.
en fait c'est a peu pres ca....
Je veux enregistrer l'adresse d'ou se trouve la cellule suivante pour faire une liste chainee....
Je veux enregistrer l'adresse d'ou se trouve la cellule suivante pour faire une liste chainee....
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
20 déc. 2006 à 17:33
20 déc. 2006 à 17:33
c'est bien ce que je craignait....
Aïe.
l'adresse change à chaque foi que tu lance le programme. Ce n'est pas une solution, ça risque de te faire des exeptions, et si ça n'en fait pas d'ecraser d'autre variables !!
Il faut que tu boucle autrement pour récupérer ta liste.
à defaut, voici comment faire :
int tmp;
iflect>>tmp;
*pTemp.suivant=tmp;
si c'est accepter par le compilateur, sinon, essai le transtypage (enfin, evite d'essayer)
Aïe.
l'adresse change à chaque foi que tu lance le programme. Ce n'est pas une solution, ça risque de te faire des exeptions, et si ça n'en fait pas d'ecraser d'autre variables !!
Il faut que tu boucle autrement pour récupérer ta liste.
à defaut, voici comment faire :
int tmp;
iflect>>tmp;
*pTemp.suivant=tmp;
si c'est accepter par le compilateur, sinon, essai le transtypage (enfin, evite d'essayer)
Char Snipeur
Messages postés
9813
Date d'inscription
vendredi 23 avril 2004
Statut
Contributeur
Dernière intervention
3 octobre 2023
1 298
21 déc. 2006 à 09:39
21 déc. 2006 à 09:39
de toute façon, même si le compilateur avait accepter la commande, ça aurai pas fonctionner !!
suivant est un pointeur, il représente donc une "case" mémoire de la RAM. Si ton programme est terminé, ordi rebooter, la case est effacer: si tu la rappel les informations n'y seront plus. Et pire, il y a une infime chance que cette case soit à nouveau attribué à ton programme, l'OS te lancera donc un message comme quoi ton programme essai de lire là ou il n'a pas le droit et tuera le programme.
Je pense que tu n'a pas bien saisi du tout ce qu'est un pointeur et une liste chainée. Je te conseil de faire des recherche dessus, et quand tu aura compris l'énormité de ce que tu voulais faire, la solution à ton problème te semblera évidente.
j'ai pas trop le temps de fouillé, mais regarde les messages du forum programmation de "mamiemando" elle y fait quelques rappel et cou sur les pointeurs et les listes chainés ce qui te sera très utile
suivant est un pointeur, il représente donc une "case" mémoire de la RAM. Si ton programme est terminé, ordi rebooter, la case est effacer: si tu la rappel les informations n'y seront plus. Et pire, il y a une infime chance que cette case soit à nouveau attribué à ton programme, l'OS te lancera donc un message comme quoi ton programme essai de lire là ou il n'a pas le droit et tuera le programme.
Je pense que tu n'a pas bien saisi du tout ce qu'est un pointeur et une liste chainée. Je te conseil de faire des recherche dessus, et quand tu aura compris l'énormité de ce que tu voulais faire, la solution à ton problème te semblera évidente.
j'ai pas trop le temps de fouillé, mais regarde les messages du forum programmation de "mamiemando" elle y fait quelques rappel et cou sur les pointeurs et les listes chainés ce qui te sera très utile