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 :

Surcharge de l'opérateur <<


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Ingénieur systèmes embarqués
    Inscrit en
    Janvier 2006
    Messages
    81
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur systèmes embarqués
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 81
    Par défaut Surcharge de l'opérateur <<
    Bonsoir
    Pour pouvoir afficher les attributs de ma classe, j'aimerais surcharger l'opérateur <<. J'ai pu lire sur plusieurs sites qu'une bonne façon de faire est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ostream &operator<<(ostream &os, const A &a) { 
      return os << a.attribut1 << a.attribut2 << ...; 
    }
    Mais mon compilateur me répond : error: ‘std::ostream& A::operator<<(const std::ostream&, const A&)’ must take exactly one argument
    Comment se fait-il que mon compilateur ne m'autorise qu'un argument ?

    Merci d'avance pour votre aide.

  2. #2
    Membre confirmé
    Homme Profil pro
    Ingénieur systèmes embarqués
    Inscrit en
    Janvier 2006
    Messages
    81
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur systèmes embarqués
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 81
    Par défaut Résolu tout seul
    Je réponds pour ceux qui auraient eu le même problème :
    Deux solutions
    1. Si la fonction doit être dans la classe, il faut déclarer la fonction de type amie :
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      friend ostream &operator<<(ostream &os, const A &a) { 
        return os << a.attribut1 << a.attribut2 << ...; 
      }
    2. Si la fonction peut être hors de la classe, celà fonctionne sans problème

  3. #3
    Rédacteur

    Avatar de Davidbrcz
    Homme Profil pro
    Ing Supaéro - Doctorant ONERA
    Inscrit en
    Juin 2006
    Messages
    2 307
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ing Supaéro - Doctorant ONERA

    Informations forums :
    Inscription : Juin 2006
    Messages : 2 307
    Par défaut
    operator >> (de même pour operator<<) ne peut pas être membre d'une classe car une fonction membre recoit (implicitement) this comme premier paramètre, ce qui est contraire avec le fait que ces fonctions doivent recevoir un flux en tant que premier paramètre.

    Sinon cf cette entré:
    http://cpp.developpez.com/faq/cpp/?p...teur_affichage
    "Never use brute force in fighting an exponential." (Andrei Alexandrescu)

    Mes articles dont Conseils divers sur le C++
    Une très bonne doc sur le C++ (en) Why linux is better (fr)

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

Discussions similaires

  1. Surcharge de l'opérateur new
    Par :Bronsky: dans le forum C++
    Réponses: 17
    Dernier message: 27/10/2010, 21h33
  2. Réponses: 8
    Dernier message: 29/08/2006, 00h56
  3. [C#] Surcharge de l'opérateur ==
    Par LE NEINDRE dans le forum Windows Forms
    Réponses: 3
    Dernier message: 18/07/2006, 16h19
  4. Réponses: 6
    Dernier message: 12/07/2006, 15h34
  5. Réponses: 15
    Dernier message: 25/01/2005, 16h51

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