IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C++ Discussion :

ecrite dans un fichier : il m'ecrit n'importe quoi ?


Sujet :

C++

  1. #1
    Membre actif
    Inscrit en
    Septembre 2003
    Messages
    391
    Détails du profil
    Informations forums :
    Inscription : Septembre 2003
    Messages : 391
    Points : 207
    Points
    207
    Par défaut ecrite dans un fichier : il m'ecrit n'importe quoi ?
    Bonjour,
    j'ai un bug assez penible, j'ecris dans un fichier mais le resultat n'est pas celui attendu :
    voici mon code :
    gestion du fichier :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    std::ofstream fh("test.txt", std::ios::out | std::ios::trunc);
    if(!fh) return;
    fh<<"TEST!!!"<<std::endl;
    worldarea->SaveState(fh); // liste les worlds
    fh.close();
    je passe par une premiere fonction ici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    void worlds::SaveState(std::ostream& sav)
    {
    	sav<<"===WORLDS"<<std::endl;
    	for (std::vector<world*>::iterator it=vWorlds.begin();it!=vWorlds.end();++it)
    	{
    		sav<<"->"<<it; // j'ai ajouté le "->" pour reperage dans le fichier
    	}
    	sav<<"---WORLDS"<<std::endl;
    }
    et enfin, là ou ca debloque :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    std::ostream& operator<< (std::ostream& sav, const world &w)
    {
    	sav<<w.id<<" "<<w.complete<<" "<<w.rings<<std::endl;
    	return sav;
    }
    ce me semble assez simple comme code,
    et voilà ce que ca donne dans le fichier :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    TEST!!!
    ===WORLDS
    ->00A19850->00A19854->00A19858->00A1985C---WORLDS
    voilà, je ne comprends pas : tout ce qui se passe en dehors de l'operateur << fonctionne, mais pas du tout ce qu'il se passe dedans (même le std::endl ne revient pas à la ligne)
    j'ai pas précisé mais id est un int, complete un bool et rings un int.

    si vous avez une idée...

    D'avance, merci.

  2. #2
    Membre émérite

    Inscrit en
    Mai 2008
    Messages
    1 014
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 1 014
    Points : 2 252
    Points
    2 252
    Par défaut
    Salut,
    C'est une erreur d'étourderie :

    std::vector<world*>::iterator
    Donc
    sav<<"->"<<*it;

    D'ailleurs je l'ai remarqué grâce à :
    ->00A19850->00A19854->00A19858->00A1985C---WORLDS
    qui affiche manifestement des adresses mémoires, donc probablement la valeur d'un pointeur.

  3. #3
    Membre actif
    Inscrit en
    Septembre 2003
    Messages
    391
    Détails du profil
    Informations forums :
    Inscription : Septembre 2003
    Messages : 391
    Points : 207
    Points
    207
    Par défaut
    Citation Envoyé par Arzar Voir le message
    Salut,
    C'est une erreur d'étourderie :

    std::vector<world*>::iterator
    Donc
    sav<<"->"<<*it;

    D'ailleurs tu pouvais le voir grâce à :
    ->00A19850->00A19854->00A19858->00A1985C---WORLDS
    qui affiche manifestement des adresses mémoires, donc probablement la valeur d'un pointeur.
    Exact, bien vu...
    mais (c'est dingue) ca ne change rien
    par contre.. au point où j'en suis j'ai essayé divers trucs...
    et voilà ce qui fonctionne (enfin semble fonctionner car tant que j'ai pas compris pourquoi je ne peux pas en être sur)
    oui ! avec deux "*" !!!!
    quelqu'un pourrait m'expliquer ?
    en tout cas, merci de m'avoir mis sur la piste.

  4. #4
    Membre émérite

    Inscrit en
    Mai 2008
    Messages
    1 014
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 1 014
    Points : 2 252
    Points
    2 252
    Par défaut
    Arrg j'espérais faire un ninja-edit avant que tu ne t'en aperçoives
    Bon, oui, désolé, je me suis trompé, ce n'est pas *it mais **it.

    En fait, it est un itérateur c'est à dire une sorte de pointeur. Quand on déréférence un itérateur (*it) on a accès à ce sur quoi pointe l'itérateur c'est à dire dans ce cas un World*.
    Mais World* est à son tour un pointeur ! Il faut donc le déréférencer à nouveau (**it) pour avoir accès au World dont à besoin l'opérateur <<.

  5. #5
    Membre actif
    Inscrit en
    Septembre 2003
    Messages
    391
    Détails du profil
    Informations forums :
    Inscription : Septembre 2003
    Messages : 391
    Points : 207
    Points
    207
    Par défaut
    pfiou.. bien vu.
    moi qui voulais utiliser les iterateurs pour faire mieux (j'ai plus souvent l'habitude d'acceder aux vecteurs par leur indices)

    Merci.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Fichier .Jar ecrit dans champs text aprés execution
    Par gigabit32 dans le forum Entrée/Sortie
    Réponses: 3
    Dernier message: 14/02/2014, 09h18
  2. Liste des disques system ecrits dans fichier un .ini
    Par pierrotm777 dans le forum VB 6 et antérieur
    Réponses: 15
    Dernier message: 13/01/2011, 17h54
  3. Le processus stisvc ecrit dans un fichier introuvable
    Par kabkab dans le forum Windows 2000/Me/98/95
    Réponses: 0
    Dernier message: 10/10/2010, 14h48
  4. Ecrit dans un fichier pdf ou word
    Par dot-_-net dans le forum Entrée/Sortie
    Réponses: 6
    Dernier message: 26/08/2009, 17h27
  5. Restaurer un dictionnaire ecrit dans un fichier
    Par stuffy dans le forum Général Python
    Réponses: 3
    Dernier message: 28/08/2008, 19h38

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo