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

    Informations professionnelles :
    Activité : Codeur du dimanche

    Informations forums :
    Inscription : janvier 2009
    Messages : 903
    Points : 366
    Points
    366
    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 : 977
    Points
    977

    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
    903
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Lozère (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Codeur du dimanche

    Informations forums :
    Inscription : janvier 2009
    Messages : 903
    Points : 366
    Points
    366
    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
    Consultant informatique
    Inscrit en
    octobre 2004
    Messages
    10 323
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : octobre 2004
    Messages : 10 323
    Points : 21 622
    Points
    21 622

    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, 16h06
  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, 13h04
  3. Réponses: 3
    Dernier message: 02/05/2006, 16h12
  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, 22h49
  5. Réponses: 3
    Dernier message: 20/09/2005, 09h59

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