IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SL & STL C++ Discussion :

Problème Iterateur sur liste d'objets


Sujet :

SL & STL C++

  1. #1
    Futur Membre du Club
    Inscrit en
    Novembre 2007
    Messages
    7
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 7
    Points : 6
    Points
    6
    Par défaut Problème Iterateur sur liste d'objets
    Bonjour.
    Je fais un petit programme qui permet d'afficher des listes de divers éléments, comme des Animaux, des Personnes, ou des types de nourriture entre autres.

    Voila des bouts de code :

    Nourriture nourr1("Bambou", 16.5, "Bambou'Four");
    nourritures.push_back(nourr1); //nourritures est une liste de Nourriture
    Ensuite, je fais :
    list<Nourriture>::iterator it;
    for (it=nourritures.begin(); it!=nourritures.end(); ++it)
    cout << *it->afficher() << endl;

    Sachant que ma classe Nourriture possède bien la méthode "void afficher();"

    A la compilation, je reçois ceci à ma grande surprise :

    erreur : valeur void n'a pas été ignorée comme elle aurait dû l'être

    l'erreur concerne la ligne de l'appel de afficher();

    Je comprends pas d'où ça vient.

    Merci pour toute éventuelle réponse.

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    92
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France, Côte d'Or (Bourgogne)

    Informations forums :
    Inscription : Mai 2005
    Messages : 92
    Points : 108
    Points
    108
    Par défaut
    Citation Envoyé par kornterstrike Voir le message

    Voila des bouts de code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Nourriture nourr1("Bambou", 16.5, "Bambou'Four");
            nourritures.push_back(nourr1); //nourritures est une liste de Nourriture
     
        list<Nourriture>::iterator it;
        for (it=nourritures.begin(); it!=nourritures.end(); ++it)
            cout << *it->afficher() << endl;
    Sachant que ma classe Nourriture possède bien la méthode "void afficher();"
    Quand tu écris "cout << xxx", tu suppose que xxx est un objet d'un type qui est gérable par le flux cout (un nombre, une chaîne de caractères, etc.).

    Quand tu écris "it->afficher", tu appelles bien la méthode afficher de l'objet pointé par it, et cette fonction ne renvoie aucune valeur: elle retourne void.

    Tu fais donc qq chose comme un "cout << void"...
    Bref, on ne peut pas utiliser dans une instruction la valeur retournée par une fonction dont le type de retour est void, c'est ce que te dit l'erreur.

    Par ailleurs, tu auras certainement une autre erreur : *it->afficher() signifie que tu veux déréférencer le pointeur que te renvoie la fonction afficher... c'est peut-être pas ce que tu voulais écrire.

    Si tu transformes la fonction afficher pour qu'elle renvoie un std::string par exemple, tu pourras faire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    cout << it->afficher() << endl;
    et tout devrait bien se passer.

Discussions similaires

  1. [XL-2003] Problème rechercheV sur liste déroulante
    Par sandra000000 dans le forum Excel
    Réponses: 3
    Dernier message: 15/04/2013, 19h07
  2. [Délégué] Traitement sur liste d'objets génériques
    Par Chen norris dans le forum XNA/Monogame
    Réponses: 1
    Dernier message: 26/03/2013, 11h44
  3. iterateur sur vecteur avec objets
    Par debloc dans le forum Débuter
    Réponses: 11
    Dernier message: 04/11/2011, 19h39
  4. Tri sur liste d'objet
    Par topolino dans le forum ASP.NET
    Réponses: 5
    Dernier message: 23/01/2009, 10h59
  5. Réponses: 13
    Dernier message: 06/11/2008, 09h30

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo