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 :

attribut de type ofstream


Sujet :

C++

  1. #1
    Membre averti
    Avatar de stc074
    Homme Profil pro
    Codeur du dimanche
    Inscrit en
    Janvier 2009
    Messages
    1 015
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Lozère (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Codeur du dimanche

    Informations forums :
    Inscription : Janvier 2009
    Messages : 1 015
    Points : 407
    Points
    407
    Billets dans le blog
    1
    Par défaut attribut de type ofstream
    Bonjour, j'ai une classe File dans la quelle j'ai déclarer un attribut ofstream afin de pouvoir le réutiliser partout dans ma classe:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    class File
    {
        public:
            File(string filename);
            virtual ~File();
            void openWrite();
            void closeWrite();
            void writeInt(int i);
        protected:
        private:
            string filename;
            ofstream out;
    };
    Le problème c'est que si je veux ouvrir le flux out avec un nom de fichier :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    void File::openWrite() {
        out(filename.c_str());
        if(!out.is_open()) {
            cout << "impossible d'ouvrir '" << filename << "'" << endl;
            exit(EXIT_FAILURE);
        }
    }
    J'ai une erreur à la compilation :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    /home/pj/CPLUSPLUS/Drawing/src/File.cpp|10|erreur: no match for call to ‘(std::ofstream {aka std::basic_ofstream<char>}) (const char*)’|
    la ligne 10 c'est out(filename.c_str());

    Merci pour votre aide !

  2. #2
    Membre éprouvé

    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    533
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 533
    Points : 1 086
    Points
    1 086
    Par défaut
    out(filename.c_str()) ne fait pas ce que tu crois.
    Tu ne rappelles pas le constructeur ofstream::ofstream(const char*) de ton objet out, mais tu tentes d'appeler ofstream::operator()(const char*), c'est à dire une surcharge de l'opérateur parenthèses, qui n'existe pas dans la classe ofstream.

    Par contre, il existe la méthode open pour faire ce que tu souhaites.

  3. #3
    Membre averti
    Avatar de stc074
    Homme Profil pro
    Codeur du dimanche
    Inscrit en
    Janvier 2009
    Messages
    1 015
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Lozère (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Codeur du dimanche

    Informations forums :
    Inscription : Janvier 2009
    Messages : 1 015
    Points : 407
    Points
    407
    Billets dans le blog
    1
    Par défaut
    Merci, cob59, ça fonctionne bien.

  4. #4
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 614
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 614
    Points : 30 626
    Points
    30 626
    Par défaut
    Salut,

    Penses cependant, pour le cas où cela aurait une importance éventuelle, que le fait d'ouvrir un fichier peut le verrouiller sur certains systèmes, ce qui a pour effet de le rendre totalement inaccessible à toute application extérieure.

    Je n'attire ton attention là dessus que pour le cas où ta classe servirait pour un logger destiné à garder une trace pour une application tournant en permanence... Il serait dommage de devoir arrêter l'application pour pouvoir lire le log
    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

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

Discussions similaires

  1. inserer un attribut de type Timestamp
    Par yanis97 dans le forum JDBC
    Réponses: 1
    Dernier message: 22/11/2006, 15h06
  2. comment recuperer attribut de type hidden
    Par MSM_007 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 1
    Dernier message: 19/07/2006, 12h04
  3. Réponses: 3
    Dernier message: 02/05/2006, 15h12
  4. probleme avec les attributs de type ID
    Par ben83 dans le forum XML/XSL et SOAP
    Réponses: 1
    Dernier message: 01/01/2006, 21h49
  5. Réponses: 3
    Dernier message: 20/09/2005, 08h59

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