Précédent   Forum du club des développeurs et IT Pro > C et C++ > C++
C++ Forum d'entraide technique sur le langage C++. Avant de poster -> F.A.Q C++
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 03/01/2013, 18h49   #1
stc074
Membre habitué
 
Avatar de stc074
 
Homme Pierre-jean
Codeur du dimanche
Inscription : janvier 2009
Messages : 466
Détails du profil
Informations personnelles :
Nom : Homme Pierre-jean
Âge : 38
Localisation : France, Haute Savoie (Rhône Alpes)

Informations professionnelles :
Activité : Codeur du dimanche

Informations forums :
Inscription : janvier 2009
Messages : 466
Points : 143
Points : 143
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 !
stc074 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/01/2013, 19h35   #2
cob59
Membre chevronné
 
Inscription : décembre 2008
Messages : 490
Détails du profil
Informations forums :
Inscription : décembre 2008
Messages : 490
Points : 753
Points : 753
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.
cob59 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 04/01/2013, 19h57   #3
stc074
Membre habitué
 
Avatar de stc074
 
Homme Pierre-jean
Codeur du dimanche
Inscription : janvier 2009
Messages : 466
Détails du profil
Informations personnelles :
Nom : Homme Pierre-jean
Âge : 38
Localisation : France, Haute Savoie (Rhône Alpes)

Informations professionnelles :
Activité : Codeur du dimanche

Informations forums :
Inscription : janvier 2009
Messages : 466
Points : 143
Points : 143
Merci, cob59, ça fonctionne bien.
stc074 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/01/2013, 17h33   #4
koala01
Modérateur
 
Avatar de koala01
 
Philippe Dunski
Inscription : octobre 2004
Messages : 8 625
Détails du profil
Informations personnelles :
Nom : Philippe Dunski
Âge : 41

Informations forums :
Inscription : octobre 2004
Messages : 8 625
Points : 13 341
Points : 13 341
Envoyer un message via MSN à koala01 Envoyer un message via Skype™ à koala01
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
je ne répondrai à aucune question technique par E-mail, message visiteur ou message privé
Vous avez obtenu votre réponse pensez au bouton en bas de page
koala01 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Cette discussion est résolue.
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 05h02.


 
 
 
 
Partenaires

Hébergement Web