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

SL & STL C++ Discussion :

Erreur de compilation à la copie d'une référence vers std::ofstream


Sujet :

SL & STL C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 32
    Par défaut Erreur de compilation à la copie d'une référence vers std::ofstream
    Salut à tous,

    Quand je compile le code suivant sous Visual Studio 2005 (je n'ai pas testé avec d'autres compilos récent, mais ça compile bien avec Visual 6), ça plante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    #include <fstream>
     
    std::ofstream& out = std::ofstream ();
     
    void test (std::ofstream& in)
    {
    	out = in;
    }
    Voici l'erreur renvoyée :

    c:\program files\microsoft visual studio 8\vc\include\ostream(581) : error C2249: 'std::basic_ios<_Elem,_Traits>::operator =' : aucun chemin accessible vers private membre déclaré(e) dans 'std::basic_ios<_Elem,_Traits>' de base virtuelle
    with
    [
    _Elem=char,
    _Traits=std::char_traits<char>
    ]
    c:\program files\microsoft visual studio 8\vc\include\ios(152) : voir la déclaration de 'std::basic_ios<_Elem,_Traits>::operator ='
    with
    [
    _Elem=char,
    _Traits=std::char_traits<char>
    ]
    Le diagnostic s'est produit dans la fonction 'std::basic_ostream<_Elem,_Traits> &std::basic_ostream<_Elem,_Traits>::operator =(const std::basic_ostream<_Elem,_Traits> &)' générée par le compilateur
    with
    [
    _Elem=char,
    _Traits=std::char_traits<char>
    ]
    c:\program files\microsoft visual studio 8\vc\include\fstream(548) : error C2248: 'std::basic_streambuf<_Elem,_Traits>::operator =' : impossible d'accéder à private membre déclaré(e) dans la classe 'std::basic_streambuf<_Elem,_Traits>'
    with
    [
    _Elem=char,
    _Traits=std::char_traits<char>
    ]
    c:\program files\microsoft visual studio 8\vc\include\streambuf(23) : voir la déclaration de 'std::basic_streambuf<_Elem,_Traits>::operator ='
    with
    [
    _Elem=char,
    _Traits=std::char_traits<char>
    ]
    Le diagnostic s'est produit dans la fonction 'std::basic_filebuf<_Elem,_Traits> &std::basic_filebuf<_Elem,_Traits>::operator =(const std::basic_filebuf<_Elem,_Traits> &)' générée par le compilateur
    with
    [
    _Elem=char,
    _Traits=std::char_traits<char>
    ]
    Pourtant si je fais ça, ça marche. Vous avez une idée du pourquoi ? Merci !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    #include <fstream>
     
    //std::ofstream& out = std::ofstream ();
     
    void test (std::ofstream& in)
    {
    	std::ofstream& out = in;
    }

  2. #2
    Membre émérite
    Avatar de Spout
    Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    904
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Février 2007
    Messages : 904
    Par défaut
    Salut,
    De mémoire, je sais qu'il y a une restriction avec l'opérateur = de std::ofstream.
    Ca n'a peut-être rien à voir, mais fais une recherche dans le forum, tu trouveras des discussions liées à ce sujet.

  3. #3
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    Citation Envoyé par FrigoAcide Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    #include <fstream>
     
    std::ofstream& out = std::ofstream ();
     
    void test (std::ofstream& in)
    {
    	out = in;
    }
    Ici, tu fais une affectation de contenu et l'opérateur = peut avoir été interdit.
    Citation Envoyé par FrigoAcide Voir le message
    Pourtant si je fais ça, ça marche. Vous avez une idée du pourquoi ? Merci !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    #include <fstream>
     
    //std::ofstream& out = std::ofstream ();
     
    void test (std::ofstream& in)
    {
    	std::ofstream& out = in;
    }
    Ici, tu fais une affectation d'adresse (initialisation de ta référence). Le contenu n'entre pas en jeu.
    En fait:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    std::ofstream& out = std::ofstream ();
     
    void test (std::ofstream& in)
    {
    	out = in;
    }
    Peut être vue comme:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    std::ofstream* out = std::ofstream ();
     
    void test (std::ofstream* in)
    {
    	*out = *in;
    }
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    #include <fstream>
     
    //std::ofstream& out = std::ofstream ();
     
    void test (std::ofstream& in)
    {
    	std::ofstream& out = in;
    }
    peut être vu comme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    #include <fstream>
     
    void test (std::ofstream* in)
    {
    	std::ofstream* out = in;
    }
    Là, je pense que tu comprend mieux pourquoi le second cas marche et pas le premier.

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 32
    Par défaut
    OK merci !

    Je vais retravailler mon code pour passer par des pointeurs et pas par des références.

  5. #5
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    Citation Envoyé par FrigoAcide Voir le message
    OK merci !

    Je vais retravailler mon code pour passer par des pointeurs et pas par des références.
    Pour être plus précis, tu peux passer par des références (std::ofstream& in) mais pas par des valeurs (std::ofstream in). Les pointeurs c'était pour expliquer les références.

Discussions similaires

  1. [XL-2000] Erreur lors de la copie d'une feuille vers un autre classeur qui vient d'être créé
    Par Hankow dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 07/04/2015, 09h10
  2. Erreur 1004 A la copie d'une feuille
    Par hitmax dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 07/08/2008, 09h59
  3. Réponses: 0
    Dernier message: 07/05/2008, 11h31
  4. Erreur lors de l'ajout d'une référence web
    Par Pilloutou dans le forum Visual Studio
    Réponses: 2
    Dernier message: 12/02/2007, 15h11
  5. [VBA-E]Erreur lors de la copy d'une feuille
    Par nattyman dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 07/08/2006, 14h30

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