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 :

Question concernant les fonctions


Sujet :

C++

  1. #1
    Membre du Club
    Inscrit en
    Février 2007
    Messages
    50
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 50
    Points : 41
    Points
    41
    Par défaut Question concernant les fonctions
    Bonjour,


    Je découvre tout doucement le C++.

    J'étais en train de tester, de créer une fonction pour l'écriture dans des fichiers.

    J'ai donc testé de la sorte :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    // exemple 1 ça marche :
     
     
    #include <iostream>
    #include <string>
    #include <fstream>
     
     
    using namespace std;
     
    void ecrireFichier()
     
    {
     ofstream fichier("c:\\fichier.txt", ios::out | ios::trunc);  // ouverture en écriture avec effacement du fichier ouvert
     
     
                    fichier << "Bonjour";
     
                    fichier.close();
     
     
    }
     
    int main()
     
    {
     
    ecrireFichier();
     
    }

    Puis de la sorte, qui fonctionne également

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    .
    // ##############################
    //exemple 2 : ça marche aussi 
     
    #include <iostream>
    #include <string>
    #include <fstream>
     
     
    using namespace std;
     
    void ecrireFichier(string valeur)
     
    {
     ofstream fichier("c:\\fichier.txt", ios::out | ios::trunc);  // ouverture en écriture avec effacement du fichier ouvert
     
     
                    fichier << valeur;
     
                    fichier.close();
     
     
    }
     
    int main()
     
    {
     
    ecrireFichier("Salut !");
     
    }

    Par contre ici, en mettant en parametre à la fois le chemin du fichier et la valeur à écrire, ça coince.

    J'ai l'erreur suivante dans Code::Blocks

    erreur à la ligne 11 "error: no matching function for call to 'std::basic_ofstream<char>::basic_ofstream(std::string&, std::_Ios_Openmode)'|"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
     
    //##########################
    // exemple 3 : ça ne marche pas 
    //erreur à la ligne 11 "error: no matching function for call to 'std::basic_ofstream<char>::basic_ofstream(std::string&, std::_Ios_Openmode)'|"
     
     
    #include <iostream>
    #include <string>
    #include <fstream>
     
     
    using namespace std;
     
    void ecrireFichier(string fichierEcrire, string valeur)
     
    {
     ofstream fichier(fichierEcrire, ios::out | ios::trunc);  // ouverture en écriture avec effacement du fichier ouvert
     
     
                    fichier << valeur;
     
                    fichier.close();
     
     
    }
     
    int main()
     
    {
     
    ecrireFichier("c:\\fichier.txt", "Salut !");
     
    }

    Pourriez vous m'expliquer ce qui semble poser problème ?


    Merci

  2. #2
    Expert confirmé

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2007
    Messages
    1 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 895
    Points : 4 551
    Points
    4 551
    Par défaut
    Aussi étrange que celà puisse paraître, les fstream (ifstream, ofstream, fstream + les cousins en wide char) ne prennent pas le nom de fichier à ouvrir sous la forme d'un sd::string, mais sous la forme d'un const char *. Ne me demandez pas pourquoi.

    Le code a écrire est donc presque OK, sauf la ligne 17 dans ton dernier exemple, qui doit être

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ofstream fichier(fichierEcrire.c_str(), ios::out | ios::trunc);
    (ajout du c_str() pour récupérer un const char*).

  3. #3
    Membre du Club
    Inscrit en
    Février 2007
    Messages
    50
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 50
    Points : 41
    Points
    41
    Par défaut
    Etrange en effet, mais bon ils ont surement une bonne raison ! Merci pour votre réponse rapide !

    Je vais indiquer résolu.



    ps : avec le C++, j'ai pas fini de m'amuser et venir poser des questions je pense

  4. #4
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 381
    Points : 41 582
    Points
    41 582
    Par défaut
    Pour la raison, je pense que l'auteur voulait que std::fstream ne dépende pas de std:string.

    Si on regarde bien, tous les flux pourraient exister sans problème si <string> n'existe pas; même les operator<< sont en fait des fonctions globales, déclarées (et définies aussi vu qu'elles sont template) dans <string>. Pareil pour le getline() qui affecte une string: C'est une fonction extérieure (std::getline()) contrairement aux autres versions (std::istream::getline()).

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

Discussions similaires

  1. question concernant les fonctions surchargé
    Par lazzeroni dans le forum Oracle
    Réponses: 4
    Dernier message: 28/06/2006, 10h41
  2. Questions concernant les études supérieures et travails
    Par Vivian Pennel dans le forum Etudes
    Réponses: 25
    Dernier message: 21/06/2005, 15h23
  3. Réponses: 11
    Dernier message: 21/06/2005, 10h16
  4. [Débutant] Deux questions concernants les vues
    Par 13obscur dans le forum Eclipse Platform
    Réponses: 1
    Dernier message: 19/04/2005, 14h29
  5. Réponses: 7
    Dernier message: 10/09/2004, 14h28

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