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

  FORUM HardWare.fr
  Programmation
  C++

  écrire le contenu d un fichier dans un multiset

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

écrire le contenu d un fichier dans un multiset

n°1028387
chepa_jeml​s
Posté le 29-03-2005 à 14:41:56  profilanswer
 

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. }

mood
Publicité
Posté le 29-03-2005 à 14:41:56  profilanswer
 

n°1028559
Lam's
Profil: bas.
Posté le 29-03-2005 à 16:07:30  profilanswer
 

C'est pas un truc genre ça ?

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

n°1028611
Taz
bisounours-codeur
Posté le 29-03-2005 à 16:23:46  profilanswer
 

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
n°1028613
Taz
bisounours-codeur
Posté le 29-03-2005 à 16:24:17  profilanswer
 

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

n°1028731
chepa_jeml​s
Posté le 29-03-2005 à 17:08:39  profilanswer
 


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. }



n°1028884
Taz
bisounours-codeur
Posté le 29-03-2005 à 18:59:47  profilanswer
 

oui oui, ça marche très bien.

n°1028992
chepa_jeml​s
Posté le 29-03-2005 à 20:58:51  profilanswer
 

oki j'essais demain!!
 
merci

n°1034397
chepa_jeml​s
Posté le 04-04-2005 à 15:29:10  profilanswer
 

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?

n°1034849
Lam's
Profil: bas.
Posté le 04-04-2005 à 21:40:45  profilanswer
 

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)

n°1035280
chepa_jeml​s
Posté le 05-04-2005 à 08:38:57  profilanswer
 

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?

mood
Publicité
Posté le 05-04-2005 à 08:38:57  profilanswer
 

n°1035284
Lam's
Profil: bas.
Posté le 05-04-2005 à 08:49:21  profilanswer
 

Montre nous le code de ta fonction...

n°1035334
chepa_jeml​s
Posté le 05-04-2005 à 10:01:45  profilanswer
 

je change de pc et je vous montre ça

n°1035353
chepa_jeml​s
Posté le 05-04-2005 à 10:15:16  profilanswer
 

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. };

n°1035355
Lam's
Profil: bas.
Posté le 05-04-2005 à 10:17:27  profilanswer
 

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)


n°1035380
chepa_jeml​s
Posté le 05-04-2005 à 10:31:15  profilanswer
 

je viore tout les const? c ça?

n°1035413
chepa_jeml​s
Posté le 05-04-2005 à 10:47:36  profilanswer
 

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
        ]

n°1035422
cricri_
Posté le 05-04-2005 à 10:51:14  profilanswer
 

bah nan, fallait pas ...

n°1035431
Lam's
Profil: bas.
Posté le 05-04-2005 à 10:54:54  profilanswer
 

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.
 

n°1035446
chepa_jeml​s
Posté le 05-04-2005 à 11:07:01  profilanswer
 

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
n°1035461
Lam's
Profil: bas.
Posté le 05-04-2005 à 11:20:10  profilanswer
 

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
n°1035467
chepa_jeml​s
Posté le 05-04-2005 à 11:26:06  profilanswer
 

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
n°1035469
Taz
bisounours-codeur
Posté le 05-04-2005 à 11:27:45  profilanswer
 

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

n°1035472
chepa_jeml​s
Posté le 05-04-2005 à 11:29:25  profilanswer
 

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

n°1035493
Taz
bisounours-codeur
Posté le 05-04-2005 à 11:43:18  profilanswer
 

...

n°1035494
chepa_jeml​s
Posté le 05-04-2005 à 11:45:09  profilanswer
 

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

n°1035496
chepa_jeml​s
Posté le 05-04-2005 à 11:46:36  profilanswer
 

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
n°1035534
Lam's
Profil: bas.
Posté le 05-04-2005 à 12:18:58  profilanswer
 

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

n°1035563
chepa_jeml​s
Posté le 05-04-2005 à 12:29:40  profilanswer
 

justement j'aimerai savoir lequel de const je dosi enlever

n°1035573
chepa_jeml​s
Posté le 05-04-2005 à 12:34:19  profilanswer
 

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

n°1035576
chepa_jeml​s
Posté le 05-04-2005 à 12:37:22  profilanswer
 

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?

n°1035736
chepa_jeml​s
Posté le 05-04-2005 à 14:15:47  profilanswer
 

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

n°1043259
gilou
Modérateur
Modzilla
Posté le 11-04-2005 à 17:33:17  profilanswer
 

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é!  --
n°1043315
chepa_jeml​s
Posté le 11-04-2005 à 18:22:13  profilanswer
 

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

n°1043318
chepa_jeml​s
Posté le 11-04-2005 à 18:26:02  profilanswer
 

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

n°1043323
Lam's
Profil: bas.
Posté le 11-04-2005 à 18:30:58  profilanswer
 

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 ?

n°1043336
chepa_jeml​s
Posté le 11-04-2005 à 18:54:04  profilanswer
 

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!!

mood
Publicité
Posté le   profilanswer
 


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

  écrire le contenu d un fichier dans un multiset

 

Sujets relatifs
[VB.NET] Envoie de fichier avec socket !!Sélection d'un fichier dans une IHM !! (sous vc++ 6)
VB - Ouverture d'un fichier Word d'Excel[NetBeans] Ecrire dans le MANIFEST.MF
écrire depuis le navigateur, est-ce possible ?[Python] Visualisation de fichier HTML
Lecture d'un fichier texte contenu dans un JARCréer un fichier vide
Un bouton accecss qui m'efface le contenu de toute une colonne 
Plus de sujets relatifs à : écrire le contenu d un fichier dans un multiset


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