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++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Février 2007
    Messages
    50
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 50
    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
    Membre Expert

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2007
    Messages
    1 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    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
    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*).
    [FAQ des forums][FAQ Développement 2D, 3D et Jeux][Si vous ne savez pas ou vous en êtes...]
    Essayez d'écrire clairement (c'est à dire avec des mots français complets). SMS est votre ennemi.
    Evitez les arguments inutiles - DirectMachin vs. OpenTruc ou G++ vs. Café. C'est dépassé tout ça.
    Et si vous êtes sages, vous aurez peut être vous aussi la chance de passer à la télé. Ou pas.

    Ce site contient un forum d'entraide gratuit. Il ne s'use que si l'on ne s'en sert pas.

  3. #3
    Membre averti
    Inscrit en
    Février 2007
    Messages
    50
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 50
    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
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 395
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 395
    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()).
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

+ 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