Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 4 sur 4
  1. #1
    Membre actif Avatar de stc074
    Homme Profil pro Pierre-jean
    Codeur du dimanche
    Inscrit en
    janvier 2009
    Messages
    668
    Détails du profil
    Informations personnelles :
    Nom : Homme Pierre-jean
    Âge : 39
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Codeur du dimanche

    Informations forums :
    Inscription : janvier 2009
    Messages : 668
    Points : 194
    Points
    194

    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 :
    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 :
    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 :
    /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 émérite
    Inscrit en
    décembre 2008
    Messages
    532
    Détails du profil
    Informations forums :
    Inscription : décembre 2008
    Messages : 532
    Points : 801
    Points
    801

    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 actif Avatar de stc074
    Homme Profil pro Pierre-jean
    Codeur du dimanche
    Inscrit en
    janvier 2009
    Messages
    668
    Détails du profil
    Informations personnelles :
    Nom : Homme Pierre-jean
    Âge : 39
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Codeur du dimanche

    Informations forums :
    Inscription : janvier 2009
    Messages : 668
    Points : 194
    Points
    194

    Par défaut

    Merci, cob59, ça fonctionne bien.

  4. #4
    Modérateur
    Avatar de koala01
    Profil pro Philippe Dunski
    Inscrit en
    octobre 2004
    Messages
    9 688
    Détails du profil
    Informations personnelles :
    Nom : Philippe Dunski
    Âge : 42

    Informations forums :
    Inscription : octobre 2004
    Messages : 9 688
    Points : 15 747
    Points
    15 747

    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.

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •