Affichage d'un objet d'une std::list

Affichage d'un objet d'une std::list - C++ - Programmation

Marsh Posté le 15-03-2008 à 14:46:13    

Hello j'arrive pas à afficher un objet inséré dans une list:
 

Citation :

20 C:\Documents and Settings\Propriétaire\Bureau\ProjetProg\vin.cpp expected constructor, destructor, or type conversion before '&' token  
 
20 C:\Documents and Settings\Propriétaire\Bureau\ProjetProg\vin.cpp expected `,' or `;' before '&' token  
 
50 C:\Documents and Settings\Propriétaire\Bureau\ProjetProg\vin.cpp no match for 'operator*' in '*(&it)->std::_List_const_iterator<_Tp>::operator* [with _Tp = Vin]()'


 
 
Le CPP:
 

Citation :


#include "vin.hpp"
#include <iostream>
 
 
 
 
Vin::Vin()
{}
 
Vin::Vin(std::string nom,std::string annee):sonNom(nom), sonAnnee(annee)
{}
 
int main()
{
          Vin().execute();
          return 0;
}
 
 
ostream & operator <<(ostream & os, Vin(std::string nom, std::string annee) & l)
{
        os << l.sonNom << ' ' << l.sonAnnee << '\n';
        return os;
}
 
 
void Vin::execute()
{
     
     std::string n;
     std::cout << "nom: ";
     std::cin >> n;
     
     std::string a;
     std::cout << "annee: ";
     std::cin >> a;
     
     
     
     
     
     
     sesVins.push_back(Vin(n,a));
     
     std::list<Vin>::const_iterator it;
    it=sesVins.begin();
     
     
     
     std::cout << (**it) ;
     
     int aten;
     std::cin >> aten;
}
 
 
     
     


 
 
Le HPP:
 

Citation :


#include <string>
#include <list>
 
 
class Vin
{
    std::string sonNom;
    std::string sonAnnee;
    std::list<Vin> sesVins;
       
      public:
              Vin();
              Vin(std::string nom, std::string annee);
             void execute();
};
 


 
 
Voilà, cimer!

Reply

Marsh Posté le 15-03-2008 à 14:46:13   

Reply

Marsh Posté le 15-03-2008 à 15:17:45    

nebneblan a écrit :

Citation :

20 C:\Documents and Settings\Propriétaire\Bureau\ProjetProg\vin.cpp expected constructor, destructor, or type conversion before '&' token  
 
20 C:\Documents and Settings\Propriétaire\Bureau\ProjetProg\vin.cpp expected `,' or `;' before '&' token  
 
50 C:\Documents and Settings\Propriétaire\Bureau\ProjetProg\vin.cpp no match for 'operator*' in '*(&it)->std::_List_const_iterator<_Tp>::operator* [with _Tp = Vin]()'


 

Code :
  1. #include "vin.hpp"
  2. #include <iostream>
  3. Vin::Vin()
  4. {}
  5. Vin::Vin(std::string nom,std::string annee):sonNom(nom), sonAnnee(annee)
  6. {}
  7. int main()
  8. {
  9.           Vin().execute();
  10.           return 0;
  11. }
  12. ostream & operator <<(ostream & os, Vin(std::string nom, std::string annee) & l)
  13. {
  14.         os << l.sonNom << ' ' << l.sonAnnee << '\n';
  15.         return os;
  16. }
  17. void Vin::execute()
  18. {
  19.    
  20.      std::string n;
  21.      std::cout << "nom: ";
  22.      std::cin >> n;
  23.    
  24.      std::string a;
  25.      std::cout << "annee: ";
  26.      std::cin >> a;
  27.    
  28.    
  29.    
  30.    
  31.    
  32.    
  33.      sesVins.push_back(Vin(n,a));
  34.    
  35.      std::list<Vin>::const_iterator it;
  36.     it=sesVins.begin();
  37.    
  38.    
  39.    
  40.      std::cout << (**it) ;
  41.    
  42.      int aten;
  43.      std::cin >> aten;
  44. }


 
Le HPP:

Code :
  1. #include <string>
  2. #include <list>
  3. class Vin
  4. {
  5.     std::string sonNom;
  6.     std::string sonAnnee;
  7.     std::list<Vin> sesVins;
  8.      
  9.       public:
  10.               Vin();
  11.               Vin(std::string nom, std::string annee);
  12.              void execute();
  13. };


 
Voilà, cimer!


C'est écrit sur le message d'erreur que tu fournis (pbm ligne 20).
Le compilo ne trouvera pas ostream si t'indiques pas son namespace. De plus, t'as pas à filer le contructeur de Vin dans la déclaration de operator<<, l'objet devrait suffire.

Reply

Marsh Posté le 15-03-2008 à 15:19:15    

Ah, et j'ai oublié :o
 

nebneblan a écrit :

Voilà, cimer!

rien 2, t'as vu.
lol

Reply

Marsh Posté le 15-03-2008 à 15:24:27    

C'est quoi le namespace de ostream?

Reply

Marsh Posté le 15-03-2008 à 15:29:12    

std [:petrus75]

Reply

Marsh Posté le 15-03-2008 à 15:38:14    

marche pô  :(  
 

Citation :

std::ostream & operator <<(std::ostream & os, Vin(std::string nom, std::string annee) & l)
{
        os << l.sonNom << ' ' << l.sonAnnee << '\n';
        return os;
}


 

Citation :


20 C:\Documents and Settings\Propriétaire\Bureau\ProjetProg\vin.cpp expected `,' or `...' before '&' token  
 
 C:\Documents and Settings\Propriétaire\Bureau\ProjetProg\vin.cpp In function `std::ostream& operator<<(std::ostream&, Vin (*)(std::string, std::string))':  
 
22 C:\Documents and Settings\Propriétaire\Bureau\ProjetProg\vin.cpp `l' undeclared (first use this function)  
 
  (Each undeclared identifier is reported only once for each function it appears in.)  
 
50 C:\Documents and Settings\Propriétaire\Bureau\ProjetProg\vin.cpp no match for 'operator*' in '*(&it)->std::_List_const_iterator<_Tp>::operator* [with _Tp = Vin]()'


 
ahah! désolé pour les smileys

Message cité 1 fois
Message édité par nebneblan le 15-03-2008 à 15:39:24
Reply

Marsh Posté le 15-03-2008 à 15:48:02    

nebneblan a écrit :

marche pô  :(  
 

Citation :

std::ostream & operator <<(std::ostream & os, Vin(std::string nom, std::string annee) & l)
{
        os << l.sonNom << ' ' << l.sonAnnee << '\n';
        return os;
}


 

Citation :


20 C:\Documents and Settings\Propriétaire\Bureau\ProjetProg\vin.cpp expected `,' or `...' before '&' token  
 
 C:\Documents and Settings\Propriétaire\Bureau\ProjetProg\vin.cpp In function `std::ostream& operator<<(std::ostream&, Vin (*)(std::string, std::string))':  
 
22 C:\Documents and Settings\Propriétaire\Bureau\ProjetProg\vin.cpp `l' undeclared (first use this function)  
 
  (Each undeclared identifier is reported only once for each function it appears in.)  
 
50 C:\Documents and Settings\Propriétaire\Bureau\ProjetProg\vin.cpp no match for 'operator*' in '*(&it)->std::_List_const_iterator<_Tp>::operator* [with _Tp = Vin]()'


 
ahah! désolé pour les smileys


oh la, ça m'a l'air assez balèze comme niveau alors [:cerveau ouch]  
Bon courage, moi je vais à la pêche.

Reply

Marsh Posté le 15-03-2008 à 16:01:08    

Bon bah les autres alors -> Help svp !

Reply

Marsh Posté le 15-03-2008 à 19:25:37    

C'est pas plutôt ostream& operator <<(ostream& os, Vin& l)  ?

Reply

Marsh Posté le 15-03-2008 à 20:36:35    

C'est changer, il y a moins d'erreurs mais ça marche toujours pas ... =(
 

Citation :

50 C:\Documents and Settings\Propriétaire\Bureau\ProjetProg\vin.cpp no match for 'operator*' in '*(&it)->std::_List_const_iterator<_Tp>::operator* [with _Tp = Vin]()'

Reply

Marsh Posté le 15-03-2008 à 20:36:35   

Reply

Marsh Posté le 15-03-2008 à 20:36:42    

std::cout << (*it) ;
 
ca suffira ...

Reply

Marsh Posté le 15-03-2008 à 20:44:49    

marche pas
 
Moi qui venait ici en me disant que c'etait un truc tout con ben finalement... :heink:


Message édité par nebneblan le 15-03-2008 à 20:45:44
Reply

Marsh Posté le 15-03-2008 à 21:19:57    

reposte ton code actuel


Message édité par Joel F le 15-03-2008 à 21:20:06
Reply

Marsh Posté le 15-03-2008 à 21:30:57    

HPP:
 

Citation :


 
#include <string>
#include <list>
 
 
class Vin
{
     
       
      public:
             std::string sonNom;
    std::string sonAnnee;
    std::list<Vin> sesVins;
             
              Vin();
              Vin(std::string nom, std::string annee);
             void execute();
};
 
 
 


 
CPP:
 
 
 

Citation :

#include "vin.hpp"
#include <iostream>
 
 
 
 
Vin::Vin()
{}
 
Vin::Vin(std::string nom,std::string annee):sonNom(nom), sonAnnee(annee)
{}
 
int main()
{
          Vin().execute();
          return 0;
}
 
 
std::ostream & operator <<(std::ostream & os, Vin & l)
{
        os << l.sonNom << ' ' << l.sonAnnee << '\n';
        return os;
}
 
 
void Vin::execute()
{
     
     std::string n;
     std::cout << "nom: ";
     std::cin >> n;
     
     std::string a;
     std::cout << "annee: ";
     std::cin >> a;
     
     
     
     
     
     
     sesVins.push_back(Vin(n,a));
     
     std::list<Vin>::const_iterator it;
    it=sesVins.begin();
     
     
     
     std::cout << *it ;
     
     int aten;
     std::cin >> aten;
}
 
 
     
     

Reply

Marsh Posté le 16-03-2008 à 10:15:58    

Les balises code, enfin!

Reply

Marsh Posté le 16-03-2008 à 11:49:45    

hpp:
 
 

Code :
  1. #include <string>
  2. #include <list>
  3. class Vin
  4. {
  5.    
  6.      
  7.       public:
  8.              std::string sonNom;
  9.     std::string sonAnnee;
  10.     std::list<Vin> sesVins;
  11.            
  12.               Vin();
  13.               Vin(std::string nom, std::string annee);
  14.              void execute();
  15. };


 
 
cpp:
 

Code :
  1. #include "vin.hpp"
  2. #include <iostream>
  3. Vin::Vin()
  4. {}
  5. Vin::Vin(std::string nom,std::string annee):sonNom(nom), sonAnnee(annee)
  6. {}
  7. int main()
  8. {
  9.           Vin().execute();
  10.           return 0;
  11. }
  12. std::ostream & operator <<(std::ostream & os, Vin & l)
  13. {
  14.         os << l.sonNom << ' ' << l.sonAnnee << '\n';
  15.         return os;
  16. }
  17. void Vin::execute()
  18. {
  19.    
  20.      std::string n;
  21.      std::cout << "nom: ";
  22.      std::cin >> n;
  23.    
  24.      std::string a;
  25.      std::cout << "annee: ";
  26.      std::cin >> a;
  27.    
  28.    
  29.    
  30.    
  31.    
  32.    
  33.      sesVins.push_back(Vin(n,a));
  34.    
  35.      std::list<Vin>::const_iterator it;
  36.     it=sesVins.begin();
  37.    
  38.    
  39.    
  40.      std::cout << *it ;
  41.    
  42.      int aten;
  43.      std::cin >> aten;
  44. }


 
 
 

Reply

Marsh Posté le 16-03-2008 à 11:52:54    

vu la qualité du code de base, qqs questions avant de continuer :
 
* peut tu me justifier pourquoi la classe Vin contint un liste de Vin o_O
* passer tes parametres en références , ca te dis rien, la tu passes ta vie à copier tes string.
* WTFBBQ @ la méthode execute
 
 

Reply

Marsh Posté le 16-03-2008 à 12:01:26    

Je cherche pas à faire un code définitif, mais juste à comprendre comment afficher les objets d'une liste, donc le reste je m'en fous voilà pourquoi je passe pas par referencement entre autres.
Pas compris ton dernier point.

 

Par contre, ou devrais-je mettre la liste de vins?


Message édité par nebneblan le 16-03-2008 à 12:12:09
Reply

Marsh Posté le 16-03-2008 à 12:54:16    

la liste des vins à rien à foutre dans une instance de Vin c'est tout
Quand t'achetes un bouteille , t'as quoi : une bouteille.
la liste doit etre un objet externe.

Reply

Marsh Posté le 16-03-2008 à 13:05:55    

ok mais je la mes où alors? Dans une classe ListeVins

Reply

Marsh Posté le 16-03-2008 à 13:41:20    

par exemple

Reply

Marsh Posté le 16-03-2008 à 14:07:45    

Et sinon pour mon probleme d'affichage d'un objet Vin, tu as une idée?

Reply

Marsh Posté le 16-03-2008 à 18:26:57    

Que fait le main() au milieu du vin.cpp ?
Faut un const ici à cause du const_iterator
std:: ostream& operator <<(std:: ostream & os, const Vin & l)


Message édité par preposterus le 16-03-2008 à 18:27:33
Reply

Marsh Posté le 17-03-2008 à 10:07:42    

Ou dois-je mettre le main()?
 
Ok je testerais de mettre const Vin.
 
Et est ce que c'est bon ce que j'ai mis dans la surcharge de <<  sinon?  
 

Code :
  1. # {
  2. #         os << l.sonNom << ' ' << l.sonAnnee << '\n';
  3. #         return os;
  4. # }

Reply

Marsh Posté le 20-03-2008 à 13:02:53    

Mon problème précedent est réglé, maintenant j'en ai un nouveau... :(  
 
 
 
 
Je ne vois pas ou caser un "delete" pour supprimer mes pointeurs crées dans mon iteration...
 
 

Code :
  1. void ListeVins::afficheListe(std::ifstream & uneListeVins)
  2. {
  3.                                                                                      
  4. //On met les infos du fichier dans la list
  5. int nbrVin, i;
  6. uneListeVins >> nbrVin;
  7. uneListeVins.ignore(); uneListeVins.ignore();
  8. std::cout << "Il y a " << nbrVin << " vins:" << '\n';
  9. std::cout << '\n';
  10. //Parcours du fichier
  11. std::string nom, date, qt;
  12. for(int i=0; i<nbrVin; i++)
  13.         {
  14.                                
  15.               getline(uneListeVins, nom);
  16.               getline(uneListeVins, date);
  17.               getline(uneListeVins, qt);
  18.               Vin* v=new Vin(nom, date, qt); //, reg, cru);
  19.               sesVins.push_back(v); //insertion dans la list
  20.               uneListeVins.ignore();
  21.               uneListeVins.ignore();
  22.              
  23.              
  24.         }
  25. //Parcours de la list
  26. std::list<Vin*>::const_iterator it;
  27. for(it=sesVins.begin(); it!=sesVins.end(); it++)
  28.         {             
  29.           toString((*it));
  30.         }
  31.        
  32.         return;               
  33. }


 
 
Si je le mes dans l'iteration ça marche pas, et en dehors le "v" n'est pas reconnu...
thx pour de l'aide  :(

Reply

Marsh Posté le 20-03-2008 à 19:01:36    

Ben faut reparcourir ta liste apres coup, et faire un delete sur chacun des elements ...

Reply

Marsh Posté le 21-03-2008 à 13:22:20    

Problème réglé, allé un autre:
 
Problème pour supprimer un objet Vin. Je sais qu'il faut supprimer l'objet, puis le pointeur, mais ça marche pas.
Le problème se situe au niveau du for de la ligne 43 a 51 je pense.
J'ai pas compris comment fonctionne ce que j'ai ecrit dans le for, car je l'ai trouvé sur un autre forum, en tout cas ça n'efface que le 1er vin de la liste, si c'est un autre vin ça plante...
 

Code :
  1. void ListeVins::supprimeVin()
  2. {
  3.         std::ifstream uneListeVins("list.txt" );
  4.                            
  5.          if(!(uneListeVins.good()))
  6.          std::cout << "Pas de vins" << '\n';
  7.                            
  8.          else
  9.           {
  10.             //On met le nb de vins dans la list
  11.             int nbrVin, i;
  12.            uneListeVins >> nbrVin;
  13.             uneListeVins.ignore(); uneListeVins.ignore();
  14.             std::cout << '\n';
  15.                                
  16.             std::cout << "Il y a " << nbrVin << " vins:" << '\n';
  17.                                
  18.              //Parcours du fichier
  19.              std::string nom, date, qt;
  20.              Vin* v;
  21.              for(int i=0, ; i<nbrVin; i++)
  22.               {
  23.                                
  24.                getline(uneListeVins, nom);
  25.                getline(uneListeVins, date);
  26.                getline(uneListeVins, qt);
  27.                 v=new Vin(nom, date, qt); //, reg, cru);
  28.                 sesVins.push_back(v); //insertion dans la list
  29.                 toString(v);                                       
  30.                 uneListeVins.ignore();
  31.                                        
  32.              
  33.                 }
  34.        
  35.              std::cout << "Entrez le nom du vin a supprimer " << '\n';
  36.              std::cout << '\n';
  37.              std::string unVin;
  38.              std::cin >> unVin;
  39.                                
  40.              std::list<Vin*>::iterator it;
  41.                                
  42.               for(it=sesVins.begin(); it!=sesVins.end() ; it++)
  43.               {
  44.                std::list<Vin*>::iterator iter=it;
  45.                it++;
  46.                if( ( leNom(*iter) )==unVin)
  47.                {
  48.                delete *iter;                                                                                                               
  49.                sesVins.erase(iter);
  50.                                                          }
  51.                                                        
  52.                                                        
  53.                 }
  54.                 std::cout << "Vin efface" << '\n';
  55.  
  56.                 std::ofstream uneListeVins("list.txt" );
  57.                    
  58.                 uneListeVins << (sesVins.size()) << '\n';
  59.                 uneListeVins << '\n';
  60.                    
  61.                  for(it=sesVins.begin(); it!=sesVins.end(); it++)
  62.                   {
  63.                    toStringF(uneListeVins,(*it));
  64.                   }
  65.                                
  66.                    delete v;
  67.                                
  68.                    }//else   
  69.                        
  70.                            
  71.                            
  72. }


Message édité par nebneblan le 21-03-2008 à 13:28:58
Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

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