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
Bonjour!
Je fais du C/C++
Je souhaite enregistrer dans un fichier texte une liste chainee.
Le dernier champ pointe donc sur une autre structure.
Le probleme est que quand j'enregistre ou veut lire l'addresse de ma structure suivant : beaucoup d'erreur quand je compile (sur linux).
Voici mon code:

struct cellule {
char ligne;
int colonne;
int resultat;
struct cellule *suivant;
};


iflect>>(*pTemp).suivant; // iflect : lecture


Voici l'erreur :

partie2.cpp:309: erreur: no match pour « operator>> » dans « iflect >> pTemp->cellule::suivant »
/usr/lib/gcc/i386-redhat-linux/3.4.6/../../../../include/c++/3.4.6/bits/istream.tcc:87: note: candidats sont: std::basic_istream<_CharT, _Traits>& std::basic_istream<_CharT, _Traits>::operator>>(std::basic_istream<_CharT, _Traits>&(*)(std::basic_istream<_CharT, _Traits>&)) [with _CharT = char, _Traits = std::char_traits<char>]

et ca continue sur au moins 3 pages.......

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
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.
0
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();
0
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
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.
0
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....
0

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
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)
0
ca marche pas, cela me met que je ne peux convertir un int vers un cellule *
Comment faire alors pour pouvoir sauvegarder les donnees et les retrouver apres????
0
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
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
0