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 :

Problème de l'opérateur << sur ma classe


Sujet :

C++

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2011
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2011
    Messages : 11
    Points : 7
    Points
    7
    Par défaut Problème de l'opérateur << sur ma classe
    Bonjour, je possède plusieurs classes que je dois afficher, j'ai donc créé, pour chacun de ses classes, les méthodes suivantes :

    Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    ofstream& operator<<(ofstream& os, const Variable& uneVariable)
    {
        uneVariable.afficher(os);
        return os;
    }
     
    void Variable::afficher(ofstream& os) const
    {
        os << sonTypeRetour.c_str() << ' ' << sonNom;
    }

    Le problème que je rencontre c'est quand je veux utiliser à fond les opérateurs << pour écrire dans le fichier, comme ceci :

    Code C++ : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    void foo(ofstream& os, Variable& uneVariable)
    {
        os << uneVariable << endl; // Pas d'erreur
        os << " " << uneVariable << endl; // Erreur !!!
    }

    Je ne comprends pas pourquoi le " " fait tout planter

    Code d'erreur :

    error: no match for 'operator<<' in 'std::operator<< [with _Traits = std::char_traits<char>](((std::basic_ostream<char, std::char_traits<char> >&)(&((std::ofstream*)os)->std::basic_ofstream<char, std::char_traits<char> >::<anonymous>)), ((const char*)" ")) << uneVariable'|
    Si vous avez besoin de plus de détails n'hésitez pas
    Merci pour votre aide

  2. #2
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2011
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2011
    Messages : 11
    Points : 7
    Points
    7
    Par défaut
    On m'a donné la réponse, il faut utiliser des objets ostream& (et non pas ofstream&) dans la définition de mes méthodes, même si je souhaite travailler sur des fichiers.
    Cela fonctionne très bien

    Code C++ : 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
    ostream& operator<<(ostream& os, const Variable& uneVariable)
    {
        uneVariable.afficher(os);
        return os;
    }
     
    void Variable::afficher(ostream& os) const
    {
        os << sonTypeRetour << ' ' << sonNom;
    }
     
    void foo(ofstream& os, Variable& uneVariable)
    {
        os << uneVariable << endl;
        os << " " << uneVariable << endl; // Plus d'erreur :D
    }

  3. #3
    Expert confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    1 711
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2012
    Messages : 1 711
    Points : 4 442
    Points
    4 442
    Par défaut
    Hello,

    D'une manière générale on utilise effectivement des std::i/ostream tout simplement car ça permet d'avoir quelques chose de fonctionnel sur tout type de flux.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    void foo(ofstream& os, Variable& uneVariable)
    {
        os << uneVariable << endl; // Pas d'erreur
        os << " " << uneVariable << endl; // Erreur !!!
    }
    Pour ton problème, c'était, je pense, un problème de const-correctness : il existe un operator<<(ofstream&, const Variable&), mais pas operator<<(ofstream&, Variable&) (note le const qui a disparu )
    Hors tu appelles ici la version prenant un paramètre non-const.


    Mais, si ce n'est pas l'erreur alors je serais curieux de connaitre la raison exacte.

    edit : l'erreur ne parle pas de string (ou const char[]), mais bien de cette ligne os << uneVariable, c'est juste dommage que l'erreur ne mentionne pas le type Variable ça serait plus clair.

    edit2: Je m'embrouille et dis n'importe quoi...

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

Discussions similaires

  1. [HOOK] Problème(s) pour réaliser le tutoriel sur les HOOKS
    Par Rodrigue dans le forum C++Builder
    Réponses: 13
    Dernier message: 27/07/2016, 18h22
  2. Problème de "cxControls.dcu" no found sur Delphi 5
    Par Clemsou dans le forum Langage
    Réponses: 2
    Dernier message: 16/08/2005, 12h50
  3. Problème d'attribut de lecture seule sur des dossiers
    Par Redbull dans le forum Sécurité
    Réponses: 2
    Dernier message: 09/08/2005, 09h52
  4. [MFC] Problème pointeur sur une classe
    Par mick74 dans le forum MFC
    Réponses: 7
    Dernier message: 14/04/2004, 14h17
  5. Réponses: 7
    Dernier message: 05/01/2004, 15h11

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