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 :

operateur << et cout


Sujet :

SL & STL C++

  1. #1
    Membre émérite
    Avatar de mamelouk
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    867
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2005
    Messages : 867
    Par défaut operateur << et cout
    Salut à tous,

    Mon problème aujourd'hui est que je n'arrive pas à comprendre pourquoi je ne peut pas utiliser l'operateur << avec un ostream alors qu'il est défini et qu'il marche avec std::cout.

    Voici le code :

    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
    ostream& Box::operator <<(ostream& os) {
        return os << x<< ","<< y<< ","<< width<< ","<< height<< endl;
    }
     
     
    ostream& Frame::operator<<(ostream& os) {
        os << "frame.id : "<< id<< endl;
        for (list<Box>::iterator it = boxes.begin();
                it != boxes.end(); it ++) {
            Box box = (*it);
            os << box; // ERREUR à CETTE LIGNE (cf ci dessous)
        }
     
        os << endl;
     
        return os;
    }
    les classes Box et Frame sont tout ce qu'il y a de plus normal

    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
    class Box {
    public:
        Box();
        int x, y;
        unsigned int width, height;
        std::ostream& operator<<(std::ostream&);
    };
     
    class Frame {
    public:
        Frame();
        unsigned int id;
        std::list<Box> boxes;
        std::ostream& operator <<(std::ostream& os);
    };

    le message d'erreur est

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    In member function «std::ostream& Frame::operator<<(std::ostream&)
    erreur: no match for «operator<<" in «os << b"
    et si j'essaye de les afficher avec std::cout, ca marche très bien. Ca coince juste avec ce ofstream
    edit: ca marchait pas avec les cout en fait, j'avais pas du faire le clean

    Une idée ?

    ps: c'est dur le c++

  2. #2
    Expert confirmé

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Par défaut
    Tu es sur. Les operateurs que tu definis ont pour premiers parametres un box et une frame et pas un ostream comme il faudrait pour avoir une utilisation normale.

  3. #3
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    L'opérateur << ne doit pas être membre des classes.

    Tout est expliqué ici :
    http://c.developpez.com/faq/cpp/?pag...teur_affichage

  4. #4
    Membre émérite
    Avatar de mamelouk
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    867
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2005
    Messages : 867
    Par défaut
    Citation Envoyé par Faq C++
    Notez qu'ici notre surcharge d'opérateur est déclarée amie de la classe, car elle a besoin d'accéder aux données privées de celle-ci. Cependant ce n'est pas obligatoire, notamment si les accesseurs adéquats ont été prévus dans la classe.
    ?

    edit: en effet, le cout ne marche plus depuis que je l'ai intégré à la classe. désolé du dérangement

    ps: j'ai edité mon message d'origine, il y avait une contradiction dans ce que je disais

  5. #5
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Pas ami ne veut pas dire membre pour autant.

    Le passage intéressant était celui-ci :
    Notez bien que ce genre de surcharge ne peut pas être membre de la classe, car celà impliquerait que l'opérande gauche soit l'objet et non le flux.
    En d'autres termes, toi tu définis Box << ostream alors qu'il faut définir ostream << Box.

  6. #6
    Membre émérite
    Avatar de mamelouk
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    867
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2005
    Messages : 867
    Par défaut
    ok d'accord

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

Discussions similaires

  1. Processus d'écoute et ScrollBar
    Par liv dans le forum MFC
    Réponses: 9
    Dernier message: 27/09/2004, 09h27
  2. STL cin, cout ...
    Par oxor3 dans le forum SL & STL
    Réponses: 11
    Dernier message: 29/08/2004, 16h22
  3. cout {}
    Par graphicsxp dans le forum SL & STL
    Réponses: 9
    Dernier message: 07/08/2004, 00h30
  4. [langage] opérateur booleen
    Par louisis dans le forum Langage
    Réponses: 4
    Dernier message: 30/06/2004, 16h12
  5. [langage] l'operateur tr///
    Par March' dans le forum Langage
    Réponses: 4
    Dernier message: 03/03/2003, 21h57

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