Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1931 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  Surcharge d'opérateur

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Surcharge d'opérateur

n°1473868
casafa
Posté le 11-11-2006 à 12:52:50  profilanswer
 

Bonjour,
 
J'ai ce code qui n'est pas une fonction membre de ma classe number :

Code :
  1. ostream &operator<<(ostream &a, number b)
  2. {
  3. a<<b.nbr;
  4. return a;
  5. }

Ce code fonctionne parfaitement
 
 
Par contre si j'esseye de faire une surcharge de << avec une fonction membre de number, ça ne fonctionne pas, pourquoi ?

Code :
  1. ostream &number::operator<<(ostream &a)
  2. {
  3. a<<nbr;
  4. return a;
  5. }


Merci...
 
EDIT: en fait ça compile bien sauf quand je met le cout:  
number a;
cout<<a;


Message édité par casafa le 11-11-2006 à 13:02:30
mood
Publicité
Posté le 11-11-2006 à 12:52:50  profilanswer
 

n°1473874
LePhasme
Les Belges domineront le monde
Posté le 11-11-2006 à 13:09:13  profilanswer
 

tu n'as pas oublié le using ou les std::cout ?


---------------
Instagram - Mon PVT en Australie.
n°1473876
casafa
Posté le 11-11-2006 à 13:14:12  profilanswer
 

Non, j'ai fait un using namespace std.
 
Voici une partie des erreurs retournées par le compilateur:

Citation :

$ g++ surcharge.cpp
surcharge.cpp: In function 'int main()':
surcharge.cpp:109: error: no match for 'operator<<' in 'std::cout << a'
/usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../include/c++/4.1.2/bits/ostream.tcc:67: note: candidates are: std::basic_ostream<_CharT                                                                , _Traits>& std::basic_ostream<_CharT, _Traits>::operator<<(std::basic_ostream<_CharT, _Traits>& (*)(std::basic_ostream<_CharT, _Tra                                                                its>& )) [with _CharT = char, _Traits = std::char_traits<char>]
/usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../include/c++/4.1.2/bits/ostream.tcc:78: note:                 std::basic_ostream<_CharT                                                                , _Traits>& std::basic_ostream<_CharT, _Traits>::operator<<(std::basic_ios<_CharT, _Traits>& (*)(std::basic_ios<_CharT, _Traits>& ))                                                                 [with _CharT = char, _Traits = std::char_traits<char>]
/usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../include/c++/4.1.2/bits/ostream.tcc:90: note:                 std::basic_ostream<_CharT                                                                , _Traits>& std::basic_ostream<_CharT, _Traits>::operator<<(std::ios_base& (*)(std::ios_base& )) [with _CharT = char, _Traits = std::                                                                char_traits<char>]


Message édité par casafa le 11-11-2006 à 13:27:53
n°1473883
casafa
Posté le 11-11-2006 à 13:42:09  profilanswer
 

Je viens de lire que cout<<a; correspondait à ceci : cout.operator<<(a) ce qui expliquerai que mon cout<<a; ne fonctionnerait pas.
 
Mais alors quand est ce que cette fonction membre pourrait être appellé ?

Code :
  1. ostream &number::operator<<(ostream &a)
  2. {
  3.     a<<nbr;
  4.     return a;
  5. }

n°1474133
jesus_chri​st
votre nouveau dieu
Posté le 12-11-2006 à 11:49:05  profilanswer
 

c'est à l'envers !
tu devrais faire  
 
ostream &ostream::operator<<(number &a);
 
mais comme une classe (ici ofstream) est fermée (contrairement aux namespace qui sont ouverts) tu dois passer par une fonction mise dans le namespace std.
 

Code :
  1. namespace std
  2. {
  3.    ostream& operator<<(ostream& a, const number& b)
  4.    {
  5.        return a << b.nbr;
  6.    }
  7. }


 
edit : et passe number b par const-référence !


Message édité par jesus_christ le 12-11-2006 à 11:51:00

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  Surcharge d'opérateur

 

Sujets relatifs
surcharge de l'operateur >>Surcharge d'opérateur : comprend pas
(résolu) surcharge operateur <<(aide) Surcharge d'operateur en c++
Surcharge d'opérateursurcharge de l'operateur []
Surcharge d'operateur et compilation[class] Surcharge d'opérateur +
[C++] Problème de surcharge d'opérateurSurcharge d'opérateur
Plus de sujets relatifs à : Surcharge d'opérateur


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR