écrire le contenu d un fichier dans un multiset

écrire le contenu d un fichier dans un multiset - C++ - Programmation

Marsh Posté le 29-03-2005 à 14:41:56    

bonjour,
 
dans le code que je vous montre en fin de post, dans le point 5, j'écris le contenu de mon mulitset dans un fichier (là y a pas de prob)
 
mais dans le point 6, je dosi lire le contenu du fichier et le remettree dans un multiset mais ca j'arrive pas a faire, pas moyen de trouver une solution...
quelqu'un pourrait m'aider?
 
les délcarations:
 

Code :
  1. #include <iostream>
  2. #include <set>
  3. #include <string>
  4. #include <iterator>
  5. #include <fstream>
  6. #include <algorithm>
  7. using namespace std;
  8. class personne
  9. {
  10. private:
  11.  string nom;
  12.  string prenom;
  13. public:
  14. personne();
  15. personne(string,string);
  16. ~personne();
  17. const string& getNom() const;
  18. const string& getPrenom() const;
  19. void setnomprenom(string, string);
  20. };
  21. void systempause();
  22. void systemcls();
  23. ostream& operator<<(ostream&, const personne& );
  24. //Foncteur qui cree une fonction pour le tri
  25. struct tri{
  26. bool operator()(const personne &a,const personne &b) const
  27. {
  28.  if (a.getNom() == b.getNom())
  29.   return ( a.getPrenom() < b.getPrenom()) ;
  30.  else
  31.   return ( a.getNom() < b.getNom()) ;
  32. };
  33. };


 
le code de la page:
 

Code :
  1. #include "header.h"
  2. int main(void)
  3. {
  4.  int test;
  5.  char choix='1';
  6.  string nom_buffer,prenom_buffer;
  7.  multiset < personne , tri > bd;
  8.  personne temp;
  9.  multiset < personne , tri >::iterator it;
  10. FILE *destination;
  11. char nom_fichier[50],nom_fichier1[50];
  12. ofstream fic;
  13. ifstream fic1;
  14. //Dans qu on a pas mis quitter  
  15. do
  16. {
  17.  systemcls();
  18.  cout<<"1 =>Ajout d une personne"<<endl;
  19.  cout<<"2 =>Supprimer une personne"<<endl;
  20.  cout<<"3 =>Liste croissante"<<endl;
  21.  cout<<"4 =>Liste decroissante"<<endl<<endl<<endl;
  22.  cout<<"Q =>Pour quitte le prog"<<endl;
  23.  cout<<"Entrez votre choix: ";
  24.  cin>>choix;
  25.  switch (choix)
  26.  {
  27.   //Ajout d une personne
  28.   case '1':
  29.    cout<<"Entrez le nom: ";
  30.    cin>>nom_buffer;
  31.    cout<<"Entrez le prenom :";
  32.    cin>>prenom_buffer;
  33.    temp.setnomprenom(nom_buffer,prenom_buffer);
  34.    bd.insert(temp);
  35.    systempause();
  36.    break;
  37.   //Suppression d une personne
  38.   case '2':
  39.    cout<<endl<<endl<<"Suppression d une personne"<<endl;
  40.    cout<<"**************************"<<endl;
  41.    cout<<"Entrez le nom: ";
  42.    cin>>nom_buffer;
  43.    cout<<"Entrez le prenom :";
  44.    cin>>prenom_buffer;
  45.    temp.setnomprenom(nom_buffer,prenom_buffer);
  46.    if (!bd.erase(temp)) cout<<"-- Valeur non trouvee --";
  47.    systempause();
  48.    break;
  49.   //Affichage croissant
  50.   case '3':
  51.    cout<<endl<<endl<<"Liste croissante"<<endl;;
  52.    cout<<"****************"<<endl<<endl;
  53.    copy(bd.begin(),bd.end(),ostream_iterator<personne>(cout,"\n" ));
  54.    systempause();
  55.    break;
  56.   //Affichage decroissant
  57.   case '4':
  58.    cout<<endl<<endl<<"Liste decroissante"<<endl;
  59.    cout<<"******************"<<endl<<endl;
  60.    copy(bd.rbegin(),bd.rend(),ostream_iterator<personne>(cout,"\n" ));
  61.    systempause();
  62.    break;
  63.   case'5':
  64.    cout<<endl<<endl<<"Enregistrement"<<endl;
  65.    cout<<"**************"<<endl<<endl;
  66.    cout<<"Entrez le nom de fichier: "<<endl;
  67.    cin>>nom_fichier;
  68.    fic.open(nom_fichier);
  69.    if (fic!=NULL){
  70.     ostream_iterator<personne>ofi(fic, "" );
  71.     copy(bd.begin(),bd.end(), ofi);
  72.    }else cout<<"--Erreur de création--"<<endl;
  73. fic.close();
  74.    systempause();
  75.    break;
  76.   case '6':
  77.    cout<<endl<<endl<<"Restauration"<<endl;
  78.    cout<<"************"<<endl<<endl;
  79.    cout<<"Entrez le nom de fichier: "<<endl;
  80.    cin>>nom_fichier1;
  81.    ifstream File("toto.txt" );
  82.    personne p;
  83. //    copy(istream_iterator<personne>(File),istream_iterator<personne>(),insert(bd));
  84.    File.close();
  85.    systempause();
  86.    break;
  87.  }
  88. }while (choix!='q' && choix!='Q');
  89. return 0;
  90. }

Reply

Marsh Posté le 29-03-2005 à 14:41:56   

Reply

Marsh Posté le 29-03-2005 à 16:07:30    

C'est pas un truc genre ça ?

Code :
  1. copy(istream_iterator<personne>(flux),
  2.      istream_iterator<personne(),
  3.      inserter(bd, bd.begin()) );

Reply

Marsh Posté le 29-03-2005 à 16:23:46    

tu fous quoi avec des FILE* ?
 

Code :
  1. #include <iostream>
  2. #include <algorithm>
  3. #include <iterator>
  4. #include <set>
  5. #include <boost/operators.hpp>
  6. struct Integer
  7.   : boost::partially_ordered<Integer>
  8. {
  9.   int value;
  10. };
  11. inline bool
  12. operator<(const Integer &a, const Integer &b)
  13. {
  14.   return a.value < b.value;
  15. }
  16. inline bool
  17. operator==(const Integer &a, const Integer &b)
  18. {
  19.   return a.value == b.value;
  20. }
  21. inline std::ostream&
  22. operator<<(std::ostream& os, const Integer &i)
  23. {
  24.   return os << i.value;
  25. }
  26. inline std::istream&
  27. operator>>(std::istream& is, Integer &i)
  28. {
  29.   return is >> i.value;
  30. }
  31. int main()
  32. {
  33.   std::multiset<Integer> mu;
  34.   std::copy(std::istream_iterator<Integer>(std::cin), std::istream_iterator<Integer>(),
  35.     std::inserter(mu, mu.begin()));
  36.   std::copy(mu.begin(), mu.end(),
  37.     std::ostream_iterator<Integer>(std::cout, ", " ));
  38.   std::cout << '\n';
  39. }


Message édité par Taz le 29-03-2005 à 16:24:44
Reply

Marsh Posté le 29-03-2005 à 16:24:17    

Lam's a écrit :

C'est pas un truc genre ça ?

Code :
  1. copy(istream_iterator<personne>(flux),
  2.      istream_iterator<personne(),
  3.      inserter(bd, bd.begin()) );



si si

Reply

Marsh Posté le 29-03-2005 à 17:08:39    


j'ai oublié de  l'éffacer!!
 
ce que tu as mis marche tu crois?car j'ai pas l'outil a disposition pour l'essayer pour le moment!!!merci de me dire quoi

Taz a écrit :

tu fous quoi avec des FILE* ?
 

Code :
  1. #include <iostream>
  2. #include <algorithm>
  3. #include <iterator>
  4. #include <set>
  5. #include <boost/operators.hpp>
  6. struct Integer
  7.   : boost::partially_ordered<Integer>
  8. {
  9.   int value;
  10. };
  11. inline bool
  12. operator<(const Integer &a, const Integer &b)
  13. {
  14.   return a.value < b.value;
  15. }
  16. inline bool
  17. operator==(const Integer &a, const Integer &b)
  18. {
  19.   return a.value == b.value;
  20. }
  21. inline std::ostream&
  22. operator<<(std::ostream& os, const Integer &i)
  23. {
  24.   return os << i.value;
  25. }
  26. inline std::istream&
  27. operator>>(std::istream& is, Integer &i)
  28. {
  29.   return is >> i.value;
  30. }
  31. int main()
  32. {
  33.   std::multiset<Integer> mu;
  34.   std::copy(std::istream_iterator<Integer>(std::cin), std::istream_iterator<Integer>(),
  35.     std::inserter(mu, mu.begin()));
  36.   std::copy(mu.begin(), mu.end(),
  37.     std::ostream_iterator<Integer>(std::cout, ", " ));
  38.   std::cout << '\n';
  39. }



Reply

Marsh Posté le 29-03-2005 à 18:59:47    

oui oui, ça marche très bien.

Reply

Marsh Posté le 29-03-2005 à 20:58:51    

oki j'essais demain!!
 
merci

Reply

Marsh Posté le 04-04-2005 à 15:29:10    

voilà j'ai essayer et quand je compil(avec visual) cela me donne ça:
 
test error LNK2001: unresolved external symbol "class std::basic_istream<char,struct std::char_traits<char> > & __cdecl operator>>(class std::basic_istream<char,struct std::char_traits<char> > &,class personne const & )" (??5@$$FYAAAV?$basic_istream@DU?$char_traits@D@std@@@std@@AAV01@ABVpersonne@@@Z)
test fatal error LNK1120: 1 unresolved externals

 
Voila comment j'ai mis la ligne de lectuire dans le fichier:
 

Code :
  1. copy(istream_iterator<personne>(File), istream_iterator<personne>(),inserter(bd, bd.begin()));


 
File étant déclaré comme suite: ifstream File("toto.txt" );
 
Quelqu'un sait me dire mon prob?

Reply

Marsh Posté le 04-04-2005 à 21:40:45    

Le message d'erreur m'a l'air plutôt clair, non ?  
 
Il ne trouve pas l'implémentation de l'opérateur:

Code :
  1. istream& operator>>(istream&, personne& );

 
 
(sauf que je ne vois pas trop ce que vient faire le const là dedans, mais bon, ça doit être la fatigue)

Reply

Marsh Posté le 05-04-2005 à 08:38:57    

ben vi j'ai mis cela mais le problème est qu'il n'en veut pas!! ce serait pas du au fait qeu c'est des strings et donc une longeur variable?
 
je devrais pas plutot faire un tableau de char au lieur d'un string?

Reply

Marsh Posté le 05-04-2005 à 08:38:57   

Reply

Marsh Posté le 05-04-2005 à 08:49:21    

Montre nous le code de ta fonction...

Reply

Marsh Posté le 05-04-2005 à 10:01:45    

je change de pc et je vous montre ça

Reply

Marsh Posté le 05-04-2005 à 10:15:16    

voila d'abord le message d'erreur:
 
c:\cours\labo c\test\MyFct.cpp(80): error C2679: binary '>>' : no operator found which takes a right-hand operand of type 'const std::string' (or there is no acceptable conversion)
c:\cours\labo c\test\MyFct.cpp(81): error C2679: binary '>>' : no operator found which takes a right-hand operand of type 'const std::string' (or there is no acceptable conversion)

 
j'ai essayé en virant les const mais a ce moment la plus iren du tout ne marche
 
mon code:
 

Code :
  1. #include <iostream>
  2. #include <set>
  3. #include <string>
  4. #include <iterator>
  5. #include <fstream>
  6. #include <algorithm>
  7. using namespace std;
  8. class personne
  9. {
  10. private:
  11.  string nom;
  12.  string prenom;
  13. public:
  14. personne();
  15. personne(string,string);
  16. ~personne();
  17. const string& getNom() const;
  18. const string& getPrenom() const;
  19. void setnomprenom(string, string);
  20. };
  21. void systempause();
  22. void systemcls();
  23. ostream& operator<<(ostream&, const personne& );
  24. istream& operator>>(istream&, const personne& );
  25. //Foncteur qui cree une fonction pour le tri
  26. struct tri{
  27. bool operator()(const personne &a,const personne &b) const
  28. {
  29.  if (a.getNom() == b.getNom())
  30.   return ( a.getPrenom() < b.getPrenom()) ;
  31.  else
  32.   return ( a.getNom() < b.getNom()) ;
  33. };
  34. };


 

Code :
  1. #include "header.h"
  2. int main(void)
  3. {
  4.  char choix='1';
  5.  string nom_buffer,prenom_buffer;
  6.  multiset < personne , tri > bd;
  7.  personne temp;
  8.  multiset < personne , tri >::iterator it;
  9. char nom_fichier[50],nom_fichier1[50];
  10. ofstream fic;
  11. ifstream fic1;
  12. //Dans qu on a pas mis quitter  
  13. do
  14. {
  15.  systemcls();
  16.  cout<<"1 =>Ajout d une personne"<<endl;
  17.  cout<<"2 =>Supprimer une personne"<<endl;
  18.  cout<<"3 =>Liste croissante"<<endl;
  19.  cout<<"4 =>Liste decroissante"<<endl<<endl<<endl;
  20.  cout<<"Q =>Pour quitte le prog"<<endl;
  21.  cout<<"Entrez votre choix: ";
  22.  cin>>choix;
  23.  switch (choix)
  24.  {
  25.   //Ajout d une personne
  26.   case '1':
  27.    cout<<"Entrez le nom: ";
  28.    cin>>nom_buffer;
  29.    cout<<"Entrez le prenom :";
  30.    cin>>prenom_buffer;
  31.    temp.setnomprenom(nom_buffer,prenom_buffer);
  32.    bd.insert(temp);
  33.    systempause();
  34.    break;
  35.   //Suppression d une personne
  36.   case '2':
  37.    cout<<endl<<endl<<"Suppression d une personne"<<endl;
  38.    cout<<"**************************"<<endl;
  39.    cout<<"Entrez le nom: ";
  40.    cin>>nom_buffer;
  41.    cout<<"Entrez le prenom :";
  42.    cin>>prenom_buffer;
  43.    temp.setnomprenom(nom_buffer,prenom_buffer);
  44.    if (!bd.erase(temp)) cout<<"-- Valeur non trouvee --";
  45.    systempause();
  46.    break;
  47.   //Affichage croissant
  48.   case '3':
  49.    cout<<endl<<endl<<"Liste croissante"<<endl;;
  50.    cout<<"****************"<<endl<<endl;
  51.    copy(bd.begin(),bd.end(),ostream_iterator<personne>(cout,"\n" ));
  52.    systempause();
  53.    break;
  54.   //Affichage decroissant
  55.   case '4':
  56.    cout<<endl<<endl<<"Liste decroissante"<<endl;
  57.    cout<<"******************"<<endl<<endl;
  58.    copy(bd.rbegin(),bd.rend(),ostream_iterator<personne>(cout,"\n" ));
  59.    systempause();
  60.    break;
  61.   case'5':
  62.    cout<<endl<<endl<<"Enregistrement"<<endl;
  63.    cout<<"**************"<<endl<<endl;
  64.    cout<<"Entrez le nom de fichier: "<<endl;
  65.    cin>>nom_fichier;
  66.    fic.open(nom_fichier);
  67.    if (fic!=NULL){
  68.     ostream_iterator<personne>ofi(fic, "" );
  69.     copy(bd.begin(),bd.end(), ofi);
  70.    }else cout<<"--Erreur de création--"<<endl;
  71. fic.close();
  72.    systempause();
  73.    break;
  74.   case '6':
  75.    cout<<endl<<endl<<"Restauration"<<endl;
  76.    cout<<"************"<<endl<<endl;
  77.    cout<<"Entrez le nom de fichier: "<<endl;
  78.    cin>>nom_fichier1;
  79.    ifstream File("toto.txt",ios::in);
  80.    personne p;
  81.    copy(istream_iterator<personne>(File), istream_iterator<personne>(),inserter(bd, bd.begin()));
  82.    File.close();
  83.    systempause();
  84.    break;
  85.  }
  86. }while (choix!='q' && choix!='Q');
  87. return 0;
  88. }


 

Code :
  1. #include "header.h"
  2. /****************************************************************
  3. *Fonction: systecls      *
  4. *****************************************************************
  5. *Description:       *
  6. * Efface l ecran      *
  7. ****************************************************************/
  8. void systemcls(){
  9. system("clear" );
  10. };
  11. /****************************************************************
  12. *Fonction: systempause      *
  13. *****************************************************************
  14. *Description:       *
  15. * Fait une pause      *
  16. ****************************************************************/
  17. void systempause(){
  18. char touche;
  19. printf("Appuyez sur la touche enter pour continuer..." );
  20. scanf("\n%c",&touche);
  21. //system("pause" );
  22. };
  23. /****************************************************************
  24. *Fonction: client      *
  25. *****************************************************************
  26. *Description:       *
  27. * Constructeur par défaut de client   *
  28. ****************************************************************/
  29. personne::personne():nom(" " ),prenom(" " ){
  30. };
  31. /****************************************************************
  32. *Fonction: getNom      *
  33. *****************************************************************
  34. *Description:       *
  35. * Renvoi la valeur de nom     *
  36. ****************************************************************/
  37. const string& personne::getNom()const{
  38. return nom;
  39. };
  40. /****************************************************************
  41. *Fonction: getPrenom      *
  42. *****************************************************************
  43. *Description:       *
  44. * Renvoi la valeur de nom     *
  45. ****************************************************************/
  46. const string& personne::getPrenom()const{
  47. return prenom;
  48. };
  49. /****************************************************************
  50. *Fonction: operator <<      *
  51. *****************************************************************
  52. *Description:       *
  53. * Surcharge de l operateur de flux de sortie  *
  54. ****************************************************************/
  55. ostream& operator<<(ostream &os,const personne &src){
  56. os<<src.getNom()<<" "<<src.getPrenom()<<endl;
  57. return os;
  58. };
  59. istream& operator>>(istream &os,const personne &src){
  60. os >> src.getNom();
  61. os >> src.getPrenom();
  62. return os;
  63. };
  64. /****************************************************************
  65. *Fonction: ~client      *
  66. *****************************************************************
  67. *Description:       *
  68. * Constructeur surcharge de client   *
  69. ****************************************************************/
  70. personne::~personne(){
  71. };
  72. /****************************************************************
  73. *Fonction: setnomprenom      *
  74. *****************************************************************
  75. *Description:       *
  76. * Permet de creer une personne   *
  77. ****************************************************************/
  78. void personne::setnomprenom(string a, string b)
  79. {
  80. nom = a;
  81. prenom = b;
  82. };

Reply

Marsh Posté le 05-04-2005 à 10:17:27    

Je te redonne mon message. Fait bien attention à la signature de la fonction, ainsi qu'au commentaire en bas du message.  
Reessaye, et redonne nous les messages d'erreurs sans le const.
 

Lam's a écrit :

Le message d'erreur m'a l'air plutôt clair, non ?  
 
Il ne trouve pas l'implémentation de l'opérateur:

Code :
  1. istream& operator>>(istream&, personne& );

 
 
(sauf que je ne vois pas trop ce que vient faire le const là dedans, mais bon, ça doit être la fatigue)


Reply

Marsh Posté le 05-04-2005 à 10:31:15    

je viore tout les const? c ça?

Reply

Marsh Posté le 05-04-2005 à 10:47:36    

j'ai viré tout les const que je pouvais trouver et voila ce que je trouve comme erreur:
 
c:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\include\xtree(484): error C2664: 'bool tri::operator ()(personne &,personne & ) const' : cannot convert parameter 1 from 'const personne' to 'personne &'
c:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\include\xtree(500): error C2664: 'bool tri::operator ()(personne &,personne & ) const' : cannot convert parameter 1 from 'const std::allocator<_Ty>::value_type' to 'personne &'
        with
        [
            _Ty=personne
        ]

Reply

Marsh Posté le 05-04-2005 à 10:51:14    

bah nan, fallait pas ...

Reply

Marsh Posté le 05-04-2005 à 10:54:54    

chepa_jemls a écrit :

j'ai viré tout les const que je pouvais trouver et voila ce que je trouve comme erreur:
 
c:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\include\xtree(484): error C2664: 'bool tri::operator ()(personne &,personne & ) const' : cannot convert parameter 1 from 'const personne' to 'personne &'
c:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\include\xtree(500): error C2664: 'bool tri::operator ()(personne &,personne & ) const' : cannot convert parameter 1 from 'const std::allocator<_Ty>::value_type' to 'personne &'
        with
        [
            _Ty=personne
        ]


Si Taz était là, il t'engueulerais comme du poisson pourri. Comme il est pas là, je vais le faire moi-même:
Mais bordel de merde, réfléchis un peu à la signification de chaque const. C'est pas possible ça !!! .  
 
On reprend:
Ton const lors du tri, il est nécessaire, puisque pour comparer 2 éléments, tu ne dois pas les modifier. Donc le foncteur de tri doit garder ses const (d'ailleurs, le message d'erreur que tu nous donne est très clair là dessus, une fois de plus).
 
Mais ton const qui permet de lire depuis un flux est tout pourri: comment veux-tu modifier un objet si tu le prend en const ?  
D'ailleurs, l'implémentation de l'opérateur que tu nous a donné ">>" est mauvaise puisque tu ne peux pas utiliser personne::getNom()  puisque celui-ci est const : tu ne peux donc pas modifier le nom en modifiant ce qui est retourné par getNom().  
 
Repose les choses à plat, n'essaye pas de faire de la bidouille, du bricolage ou des recettes de cuisine, et tu verras que tout est logique: on met const quand on ne modifie pas l'objet, et on ne le met pas lorsque l'on souhaite le modifier.
 

Reply

Marsh Posté le 05-04-2005 à 11:07:01    

ca ej sias, mais j'essasi de comprend mon erreur en fesant différentes modifs!!!   Il y a encor des probs de const, mais je voix pas torp lesquelle retirer!! help please
 
c:\cours\labo c\test\MyFct.cpp(66): error C2664: 'std::basic_string<_Elem,_Traits,_Ax>::basic_string(const std::basic_string<_Elem,_Traits,_Ax>::_Myt & )' : cannot convert parameter 1 from 'const std::string *' to 'const std::basic_string<_Elem,_Traits,_Ax>::_Myt &'
        with
        [
            _Elem=char,
            _Traits=std::char_traits<char>,
            _Ax=std::allocator<char>
        ]
        and
        [
            _Elem=char,
            _Traits=std::char_traits<char>,
            _Ax=std::allocator<char>
        ]

 
voila ce que j'essais:(j'ai mis le header et le code des fonctions!! n'ayant pas modifier mon main, je l'ia pas remis)
 
 

Code :
  1. #include <iostream>
  2. #include <set>
  3. #include <string>
  4. #include <iterator>
  5. #include <fstream>
  6. #include <algorithm>
  7. using namespace std;
  8. class personne
  9. {
  10. private:
  11.  string nom;
  12.  string prenom;
  13. public:
  14. personne();
  15. personne(string,string);
  16. ~personne();
  17. string getNom() const;
  18. string getPrenom() const;
  19. void setnomprenom(string, string);
  20. };
  21. void systempause();
  22. void systemcls();
  23. ostream& operator<<(ostream&, const personne& );
  24. istream& operator>>(istream&, const personne& );
  25. //Foncteur qui cree une fonction pour le tri
  26. struct tri{
  27. bool operator()(const personne &a,const personne &b) const
  28. {
  29.  if (a.getNom() == b.getNom())
  30.   return ( a.getPrenom() < b.getPrenom()) ;
  31.  else
  32.   return ( a.getNom() < b.getNom()) ;
  33. };
  34. };


 

Code :
  1. #include "header.h"
  2. /****************************************************************
  3. *Fonction: systecls      *
  4. *****************************************************************
  5. *Description:       *
  6. * Efface l ecran      *
  7. ****************************************************************/
  8. void systemcls(){
  9. system("clear" );
  10. };
  11. /****************************************************************
  12. *Fonction: systempause      *
  13. *****************************************************************
  14. *Description:       *
  15. * Fait une pause      *
  16. ****************************************************************/
  17. void systempause(){
  18. char touche;
  19. printf("Appuyez sur la touche enter pour continuer..." );
  20. scanf("\n%c",&touche);
  21. //system("pause" );
  22. };
  23. /****************************************************************
  24. *Fonction: client      *
  25. *****************************************************************
  26. *Description:       *
  27. * Constructeur par défaut de client   *
  28. ****************************************************************/
  29. personne::personne():nom(" " ),prenom(" " ){
  30. };
  31. /****************************************************************
  32. *Fonction: getNom      *
  33. *****************************************************************
  34. *Description:       *
  35. * Renvoi la valeur de nom     *
  36. ****************************************************************/
  37. string personne::getNom()const{
  38. return nom;
  39. };
  40. /****************************************************************
  41. *Fonction: getPrenom      *
  42. *****************************************************************
  43. *Description:       *
  44. * Renvoi la valeur de nom     *
  45. ****************************************************************/
  46. string personne::getPrenom()const{
  47. return prenom;
  48. };
  49. /****************************************************************
  50. *Fonction: operator <<      *
  51. *****************************************************************
  52. *Description:       *
  53. * Surcharge de l operateur de flux de sortie  *
  54. ****************************************************************/
  55. ostream& operator<<(ostream &os,const personne &src){
  56. os<<src.getNom()<<" "<<src.getPrenom()<<endl;
  57. return os;
  58. };
  59. istream& operator>>(istream &os,personne &src){
  60. os >> src.getNom();
  61. os >> src.getPrenom();
  62. return os;
  63. };
  64. /****************************************************************
  65. *Fonction: ~client      *
  66. *****************************************************************
  67. *Description:       *
  68. * Constructeur surcharge de client   *
  69. ****************************************************************/
  70. personne::~personne(){
  71. };
  72. /****************************************************************
  73. *Fonction: setnomprenom      *
  74. *****************************************************************
  75. *Description:       *
  76. * Permet de creer une personne   *
  77. ****************************************************************/
  78. void personne::setnomprenom(string a, string b)
  79. {
  80. nom = a;
  81. prenom = b;
  82. };


Message édité par chepa_jemls le 05-04-2005 à 11:10:37
Reply

Marsh Posté le 05-04-2005 à 11:20:10    

Je t'ai dit que ce n'était pas possible d'utiliser getNom(), car il ne te retourne pas une référence sur le membre Personne::nom : il te retourne une copie de la chaîne nom.
La bonne implémentation, ça serait plutôt ça:

Code :
  1. istream& operator>>(istream &os,personne &src){
  2.      string nom, prenom;
  3.      os >> nom;
  4.      os >> prenom;
  5.      src.setnomprenom(nom, prenom);
  6.      return os;
  7. }


Message édité par Lam's le 05-04-2005 à 11:21:24
Reply

Marsh Posté le 05-04-2005 à 11:26:06    

et alors dans setnomprenom, je les attribue correctemlent aux données membres?
 
pk fair eun retur alors?


Message édité par chepa_jemls le 05-04-2005 à 11:26:54
Reply

Marsh Posté le 05-04-2005 à 11:27:45    

ça te sert à quoi ton setnomprenom vu que tu as déjà un constructeur ?
 
# personne::personne():nom(" " ),prenom(" " ){ }
 
# personne::personne(){ }
->  

Reply

Marsh Posté le 05-04-2005 à 11:29:25    

c'est la question que je me pause lol!!
je dois renvoyer quoi alors?

Reply

Marsh Posté le 05-04-2005 à 11:43:18    

...

Reply

Marsh Posté le 05-04-2005 à 11:45:09    

je fais appel au constructeur et je renvoi l'objet, c'est ça? mais me fait tjs une erreur

Reply

Marsh Posté le 05-04-2005 à 11:46:36    

Voilà ce que je fait
 

Code :
  1. istream& operator>>(istream &os,personne &src){
  2. string nom1,prenom1;
  3. os>>nom1;
  4. os>>prenom1;
  5. src.setnomprenom(nom1,prenom1);
  6. //os >> src.getNom();
  7. //os >> src.getPrenom();
  8. return os;
  9. };


 
mais tjs ce mesage d'erreur:
 

Code :
  1. test error LNK2001: unresolved external symbol "class std::basic_istream<char,struct std::char_traits<char> > & __cdecl operator>>(class std::basic_istream<char,struct std::char_traits<char> > &,class personne const & )" (??5@$$FYAAAV?$basic_istream@DU?$char_traits@D@std@@@std@@AAV01@ABVpersonne@@@Z)
  2. test fatal error LNK1120: 1 unresolved externals


Message édité par chepa_jemls le 05-04-2005 à 11:49:56
Reply

Marsh Posté le 05-04-2005 à 12:18:58    

http://img234.exs.cx/img234/8744/bug3mg.gif

Reply

Marsh Posté le 05-04-2005 à 12:29:40    

justement j'aimerai savoir lequel de const je dosi enlever

Reply

Marsh Posté le 05-04-2005 à 12:34:19    

ben voilà, merci les gars, je suis content qu'on peut toujours compter sur les autres!!! merci a donf les gars

Reply

Marsh Posté le 05-04-2005 à 12:37:22    

Petite colle en passant, si dans ma classe personne se trouve un vecteur et que j'écris dans un fichier!!
 
est ce qu'il y a moyen de lire? et replacer le nom dans nom, prénom dans prénom et le contenu du vecteur dnas le vecteur?

Reply

Marsh Posté le 05-04-2005 à 14:15:47    

Il reste un problème, comme il s'agit de string, je dverai pas mettre un caractère qui sépare?car quand on va relire dans le fichier, il ne sauras pas la limite du string

Reply

Marsh Posté le 11-04-2005 à 17:33:17    

chepa_jemls a écrit :

ca ej sias, mais j'essasi de comprend mon erreur en fesant différentes modifs!!!

Donc tu n'essaies pas de comprendre, tu fais de la programmation-vaudou, en sacrifiant du temps de compilation au dieu Syntax Error, et en modifiant ton rituel jusqu'a ce que le dieu soit satisfait...
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 11-04-2005 à 18:22:13    

hey si, j'ai compris mes erreurs et mon code fonctionne bien, j'ai compris ce que je fesais!!
 
et je crois que c'est en fesant des erreurs qu'on avance

Reply

Marsh Posté le 11-04-2005 à 18:26:02    

bon ben on m'a femré mon autre topic alors que cela n'a rien avoir mais bon!!!
 
j'essais de mettre un vetceur de string dans ma classe personne, je met un caractère spéciaux pour sigbnaler la fin du vecteur quand je lie dnas le fichier!!
 
mais le problème est qu'il me relie absolument un nouvelle enregistrement auadn on arrive à la fin du fichier, hors, il n'y a plus de message caractère de fin alors il boucle, quelqu'un a une idée?
 
mon code su rce topic:  
http://forum.hardware.fr/forum2.ph [...] c#t1043197

Reply

Marsh Posté le 11-04-2005 à 18:30:58    

Pour qu'il trouve le mot "bidon", il faut que bidon soit un mot, c'est à dire séparé par des espaces (un avant, un après). Et ça m'a pas l'air d'être le cas, nan ?

Reply

Marsh Posté le 11-04-2005 à 18:54:04    

si il le toruve, normalement y en a , je suis pas ocn a ce point!!!
 
le truc qu'il y a , c'est quand il lit le dernier bidon (qu'il trouve bien entendu)!
 
il re commence la lecture d'un personne, mais comme il ne trouve jamais le mot bidon, ben ca foire!!

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed