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 :

[C++] problèmes avec fstream


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    35
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 35
    Par défaut [C++] problèmes avec fstream
    Bonjour,
    j'ai essayé pendent un moment d'utiliser Qt pour manipuler les fichiers (je m'en sert deja pour faire la GUI), mais, j'ai pas trouver de vrai bon tuto autre que la doc, et je m'y suis un peu perdu, alors j'ai decidé d'essayer fstream, enfin, ifstream.
    Je risque d'avoir plein de probleme donc je prepare le coup avec ce topic .
    Bon, pour commencer un tout bete :
    Dans le .h de ma classe, je le declare :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
           ifstream *fichier;
    Dans le .cpp, j'essaye de m'en servir :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
           fichier = new ifstream("poney/liste.txt", ios::in);
    Mais quand je compile :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
            error: ISO C++ forbids declaration of 'fstream' with no type
    Voila, j'ai bien penser a inclure #include <iostream> et #include <fstream>

    PS : et dites, c'est quoi les balises a mettre pour la coloration syntaxique sur ce forum ?

  2. #2
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 644
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par défaut
    Salut, et bienvenue sur le forum.

    D'abord, il faut bien comprendre que les classes fournies par la bibliothèque standard sont toutes placées dans l'espace de nom std.

    Ainsi, quand tu veux déclarer un fichier d'entrée, il faut le déclarer sous la forme de
    ou, éventuellement (mais en faisant attention à l'endroit où tu le fait) en plaçant la directiveIl faut aussi savoir que, le plus souvent, on évitera d'avoir recours à un pointeur sur les différentes classes fournies par la bibliothèque standard: on leur préférera fortement l'utilisation des références, ne serait-ce que parce que la gestion des pointeurs et de l'allocation dynamique des éléments que cela sous-entend souvent est assez compliquée à mettre en oeuvre correctement

    Enfin, et pour répondre à ta dernière question, il suffit d'entourer le code les balises [ CODE ] et [ /CODE ] (en retirant les espace)

    Tu peux aussi avoir recours au bouton disponible lors de l'écriture de ton message
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  3. #3
    Rédacteur

    Avatar de Davidbrcz
    Homme Profil pro
    Ing Supaéro - Doctorant ONERA
    Inscrit en
    Juin 2006
    Messages
    2 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ing Supaéro - Doctorant ONERA

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 307
    Par défaut
    std:: ?
    Sinon : NE JAMAIS UTILISER DE POINTEUR DE *fstream !!
    Le RAII c'est pas pour les cochons !

    Erf: grilled par un message 15 fois plus long ><
    "Never use brute force in fighting an exponential." (Andrei Alexandrescu)

    Mes articles dont Conseils divers sur le C++
    Une très bonne doc sur le C++ (en) Why linux is better (fr)

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    35
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 35
    Par défaut
    Ah merci de vos reponses !
    j'ai pas penser au namespace, je m'en sert pas du tout dans mon programme et c'est la premiere fois que j'essaye d'ouvrir des fichiers en C++ , c'est un peu nouveau pour moi ^^ .
    J'ai un nouveau probleme !
    J'ai cette erreur :
    error: 'ios' has not been declared
    Avec ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fichier.open("poney/liste.txt", ios::in);
    C'est le meme qu'au dessus, avec les meme includes ^^


    Desolé, je savais pas qu'il falait pas faire de pointeur sur un fstream, pas tapé .
    Je le referai plus, promis ! ^^

  5. #5
    Membre émérite
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    780
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mai 2006
    Messages : 780
    Par défaut
    ouaip, première règle du C++: ne pas utiliser de pointeurs sauf quand tu as une très bonne raison.

    Il y a une raison particulière pour laquelle tu utilises ton fstream dans le .h?

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    35
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 35
    Par défaut
    Non, j'ai lu les cours C++ sur le site et il declare tout dans le .h avant de l'utilisé dans le .cpp, donc je fais pareil, je devrai pas ?

  7. #7
    Membre Expert
    Avatar de coyotte507
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    1 327
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 327
    Par défaut
    Si tu n'as pas mis le using namespace std, utilise std::ios::in.


    Sinon pour les pointeurs je ne suis pas d'accord, il y a plein de raison d'utiliser des pointeurs (compatibilité avec des libs C, argument d'une fonction C++ qui est un const char*, polymorphisme, pointeurs de fonction...).

  8. #8
    Membre émérite
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    780
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mai 2006
    Messages : 780
    Par défaut
    Sinon pour les pointeurs je ne suis pas d'accord, il y a plein de raison d'utiliser des pointeurs (compatibilité avec des libs C, argument d'une fonction C++ qui est un const char*, polymorphisme, pointeurs de fonction...).
    une bonne raison quoi.

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    35
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 35
    Par défaut
    J'y avait penser mais j'ai mal vu, y avait une erreur en dessous qui y ressemblaie et j'ai cru que ça avait pas resolu le probleme, ça m'apprendra.
    Bon, ça c'est bon, maintenant j'ai une question bete, c'est est-ce que je peux reutiliser fichier ?
    j'ai fini avec mon liste.txt, je voudrais reutiliser fichier pour ouvrir un autre fichier, donc j'ai essayé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
        for (i = 0 ; i < m_nbcheval + 1 ; i++)
        {
            fichier.open("poney/" + lines.at(i), std::ios::in);
            if(fichier)
            {
                while(getline(fichier, line))  // tant que l'on peut mettre la ligne dans "contenu"
                {
                    texte.fromStdString(line);
                    contenuFichiers[i] += texte;
                    i++;
                }
            }
            fichier.close();
        }
    Mais visiblement, reouvrir un fichier ça lui parle pas, voila l'erreure :
    error: no matching function for call to 'std::basic_ifstream<char, std::char_traits<char> >::open(const QString, const std::_Ios_Openmode&)'

  10. #10
    Rédacteur

    Avatar de Davidbrcz
    Homme Profil pro
    Ing Supaéro - Doctorant ONERA
    Inscrit en
    Juin 2006
    Messages
    2 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ing Supaéro - Doctorant ONERA

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 307
    Par défaut
    lines.at(i) semble renvoyer un QString. Il faut donc convertir ce QString en std::string.
    Pour cela, matte la doc de Qt.
    "Never use brute force in fighting an exponential." (Andrei Alexandrescu)

    Mes articles dont Conseils divers sur le C++
    Une très bonne doc sur le C++ (en) Why linux is better (fr)

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

Discussions similaires

  1. Problème de copie avec fstream
    Par Nekkro dans le forum C++
    Réponses: 24
    Dernier message: 11/05/2012, 11h22
  2. Problème avec fstream
    Par Ziarrow dans le forum C++
    Réponses: 3
    Dernier message: 27/08/2010, 17h07
  3. Problème avec le header <fstream.h>
    Par micflor dans le forum Débuter
    Réponses: 7
    Dernier message: 18/12/2009, 12h06
  4. Problème avec fstream
    Par cach dans le forum SL & STL
    Réponses: 17
    Dernier message: 27/02/2005, 12h28
  5. Problème avec la mémoire virtuelle
    Par Anonymous dans le forum CORBA
    Réponses: 13
    Dernier message: 16/04/2002, 16h10

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