[C++] operateur<<() aide SVP

Résolu/Fermé
progfann Messages postés 365 Date d'inscription dimanche 11 mars 2007 Statut Membre Dernière intervention 23 septembre 2010 - 1 févr. 2009 à 20:51
Char Snipeur Messages postés 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 - 2 févr. 2009 à 08:54
Bonjour,

j'ai passé des heurs et des heurs pour résoudre ce problème des opérateur. voila l'erreur:
In file included from main.cpp 
ISO C++ forbids declaration of `ostream' with no type 
`ostream' is neither function nor member function; cannot be declared friend 
expected `;' before '&' token 
In function `int main(int, char**)': 
no match for 'operator<<' in 'std::cout << a' 
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>] 
 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>] 


livre.h:

class livre{
       private:
               int annee;
               char *titre;
               char *auteur;
       public:
              
              livre(int a=0,char*t="",char*au="");
              livre(const livre &);
               ~livre();
               void ecrire();
               void saisir();            
              friend ostream& operator<<(ostream&,const livre&);
               };



livre.cpp:


#include <iostream>
#include <cstdlib>
#include "livre.h"

using namespace std;



livre::livre(int a,char*t,char*au)
  {
    annee=a;
    titre=new char[strlen(t)+1];
    strcpy(titre,t);
    auteur=new char[strlen(au)+1];
    strcpy(auteur,au);
  } 
  
livre::livre(const livre & a)
 {
  annee=a.annee;
   titre=new char[strlen(a.titre)+1];
  strcpy(titre,a.titre);
  auteur=new char[strlen(a.auteur)+1];
  strcpy(auteur,a.auteur);
 } 
livre::~livre()
 {if(titre)
  delete []titre;
  if(auteur)
  delete []auteur;
 }
 
void livre::saisir() 
{cout<<"entrer l annee :";
     cin>>annee;
    
   cout<<"entrer le titre :";
   cin>>titre;
 
   cout<<"entrer l'auteur :";
  cin>>auteur;
}

void livre::ecrire()
{cout<<"l'annee est:"<<annee<<endl; 
 cout<<"le titre est:"<<titre<<endl;
 cout<<"l'auteur est:"<<auteur<<endl;
} 
     
     ostream& operator<<(ostream &oo,const livre &l){
              oo<<"annee : "<<l.annee<<endl;
              oo<<"titre : "<<l.titre<<endl;
              oo<<"auteur : "<<l.auteur<<endl;
              return oo;
              }



main:

#include <iostream>
#include <cstdlib>

#include "livre.h"

using namespace std;

int main(int argc, char *argv[])
{livre a;

a.saisir();

      cout<<a;
  cout<<"\n";  
  system("PAUSE");
    return EXIT_SUCCESS;
}

2 réponses

Char Snipeur Messages postés 9813 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 298
2 févr. 2009 à 08:54
Tu n'as pas de using namespace std dans livre.h donc forcément, il ne connait pas ostream mais std::ostream.
3
progfann Messages postés 365 Date d'inscription dimanche 11 mars 2007 Statut Membre Dernière intervention 23 septembre 2010 23
1 févr. 2009 à 23:30
besoin d'aide svp
0