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

  FORUM HardWare.fr
  Programmation
  C++

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

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

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

n°1702842
nebneblan
Posté le 15-03-2008 à 14:46:13  profilanswer
 

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!

mood
Publicité
Posté le 15-03-2008 à 14:46:13  profilanswer
 

n°1702847
erulio
Posté le 15-03-2008 à 15:17:45  profilanswer
 

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.

n°1702848
erulio
Posté le 15-03-2008 à 15:19:15  profilanswer
 

Ah, et j'ai oublié :o
 

nebneblan a écrit :

Voilà, cimer!

rien 2, t'as vu.
lol

n°1702851
nebneblan
Posté le 15-03-2008 à 15:24:27  profilanswer
 

C'est quoi le namespace de ostream?

n°1702852
erulio
Posté le 15-03-2008 à 15:29:12  profilanswer
 

std [:petrus75]

n°1702854
nebneblan
Posté le 15-03-2008 à 15:38:14  profilanswer
 

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
n°1702856
erulio
Posté le 15-03-2008 à 15:48:02  profilanswer
 

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.

n°1702861
nebneblan
Posté le 15-03-2008 à 16:01:08  profilanswer
 

Bon bah les autres alors -> Help svp !

n°1702905
preposteru​s
Posté le 15-03-2008 à 19:25:37  profilanswer
 

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

n°1702923
nebneblan
Posté le 15-03-2008 à 20:36:35  profilanswer
 

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]()'

mood
Publicité
Posté le 15-03-2008 à 20:36:35  profilanswer
 

n°1702925
Joel F
Real men use unique_ptr
Posté le 15-03-2008 à 20:36:42  profilanswer
 

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

n°1702930
nebneblan
Posté le 15-03-2008 à 20:44:49  profilanswer
 

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
n°1702945
Joel F
Real men use unique_ptr
Posté le 15-03-2008 à 21:19:57  profilanswer
 

reposte ton code actuel


Message édité par Joel F le 15-03-2008 à 21:20:06
n°1702948
nebneblan
Posté le 15-03-2008 à 21:30:57  profilanswer
 

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

n°1702998
Ace17
Posté le 16-03-2008 à 10:15:58  profilanswer
 

Les balises code, enfin!

n°1703016
nebneblan
Posté le 16-03-2008 à 11:49:45  profilanswer
 

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


 
 
 

n°1703017
Joel F
Real men use unique_ptr
Posté le 16-03-2008 à 11:52:54  profilanswer
 

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
 
 

n°1703021
nebneblan
Posté le 16-03-2008 à 12:01:26  profilanswer
 

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
n°1703028
Joel F
Real men use unique_ptr
Posté le 16-03-2008 à 12:54:16  profilanswer
 

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.

n°1703030
nebneblan
Posté le 16-03-2008 à 13:05:55  profilanswer
 

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

n°1703033
Joel F
Real men use unique_ptr
Posté le 16-03-2008 à 13:41:20  profilanswer
 

par exemple

n°1703037
nebneblan
Posté le 16-03-2008 à 14:07:45  profilanswer
 

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

n°1703093
preposteru​s
Posté le 16-03-2008 à 18:26:57  profilanswer
 

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
n°1703254
nebneblan
Posté le 17-03-2008 à 10:07:42  profilanswer
 

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

n°1705303
nebneblan
Posté le 20-03-2008 à 13:02:53  profilanswer
 

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  :(

n°1705604
Ace17
Posté le 20-03-2008 à 19:01:36  profilanswer
 

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

n°1705999
nebneblan
Posté le 21-03-2008 à 13:22:20  profilanswer
 

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
mood
Publicité
Posté le   profilanswer
 


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

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

 

Sujets relatifs
Java : question affichage JTreeQt probleme affichage
Un bon livre pour la java orienté objet...Non affichage d'un Background sous IE. Cause=Ajax?
Probléme de copie de tableau et d'affichagerafraichissement affichage
Formulaire et affichage de donnée venant de la base (php/mysql)Code sources Prog objet ou les trouver
Sérialiser/Désérialiser simplement des Maps et List avec Axis? utopie?camera ip problème d'affichage
Plus de sujets relatifs à : Affichage d'un objet d'une std::list


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