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

 C++ Discussion :

liste chainée c++


Sujet :

C++

  1. #1
    Membre régulier Avatar de devdeb91
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2013
    Messages
    246
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2013
    Messages : 246
    Points : 78
    Points
    78
    Par défaut liste chainée c++
    bonjour

    alors voila je voudrais faire une liste chainée en c++ mais d'après se que je vois sur internet trés peu voir pas du tout de tuto existe.

    du coup le langage c++ a t'il ou non la notion de liste chainée ?

    si oui

    j'ai ce programme en C qui représente une liste chainée

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    #include <stdio.h>
    #include <stdlib.h>
    #include <malloc.h>
     
    struct cellule
    {
            int entier;
            struct cellule *suivant;
    };
     
    struct cellule *tete;
    struct cellule *courant;
    struct cellule *nouveau;
    struct cellule *precedent;
     
    int main ()
    {
            int valeur;
            int flag;
     
            tete = NULL;
     
            printf("entrer une valeur\n");
            scanf("%d", &valeur);
     
            while(valeur != 0)
            {
                    if(valeur != 0)
                    {
                            flag = 0;
                            nouveau = (struct cellule *) malloc(sizeof(struct cellule));
                            nouveau->entier = valeur;
                            nouveau->suivant = NULL;
     
                            if( tete == NULL)
                            {
                                    tete = nouveau;
                                    flag = 1;
                            }
     
                            courant = tete;
     
                            while(flag == 0 & courant != NULL)
                            {
                                    if( tete->entier > nouveau->entier)
                                    {
                                            tete = nouveau;
                                            tete->suivant = courant;
                                            flag = 1;
                                    }
     
                                    if( courant->entier < nouveau->entier && courant->suivant == NULL)
                                    {
                                            courant->suivant = nouveau;
                                            flag = 1;
                                    }
     
                                    if( nouveau->entier <= courant->entier && flag == 0)
                                    {
                                            nouveau->suivant = courant;
                                            precedent->suivant = nouveau;
                                            flag = 1;
                                    }
     
                                    if(flag == 1)
                                    {
                                            courant = tete;
                                            precedent = courant;
                                    }
                                    else
                                    {
                                            precedent = courant;
                                            courant = courant->suivant;
                                    }
     
                            }
                    }
     
                    printf("entrer une valeur\n");
                    scanf("%d", &valeur);
            }
     
            while(courant != NULL)
            {
                    printf("entier = %d\n", courant->entier);
                    courant = courant->suivant;
            }
    }
    est ce la meme façon de faire en c++ ?

    et encore une fois si oui peut on faire une liste chainée en fonction d'un objet ?

  2. #2
    Membre confirmé Avatar de LinuxUser
    Inscrit en
    Avril 2007
    Messages
    857
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 857
    Points : 616
    Points
    616
    Par défaut
    Une liste chainée est une structure de données qui n'est en aucun cas liée à un seul langage (encore heureux!).
    Donc tu peux les implémenter avec tous les langages que tu veux dont le C++.

    Ceci dit:

    Citation Envoyé par devdeb91 Voir le message
    alors voila je voudrais faire une liste chainée en c++ mais d'après se que je vois sur internet trés peu voir pas du tout de tuto existe.
    Faux.
    Ca m'a pris un quart de seconde :
    http://sites.univ-provence.fr/cpp/V1/Lecons/L10.pdf
    http://tfc.duke.free.fr/coding/linked_list.html
    http://www.codeproject.com/Articles/...list-using-C-C

    Citation Envoyé par devdeb91 Voir le message
    du coup le langage c++ a t'il ou non la notion de liste chainée ?
    J'ai répondu plus haut.

    Citation Envoyé par devdeb91 Voir le message
    j'ai ce programme en C qui représente une liste chainée
    est ce la meme façon de faire en c++ ?
    Oui tu peux faire de la même manière.

    Citation Envoyé par devdeb91 Voir le message
    et encore une fois si oui peut on faire une liste chainée en fonction d'un objet ?
    Question mal formulée, mais oui tu peux définir des objets pour implémenter ta liste chainée.

  3. #3
    Membre expérimenté

    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2011
    Messages
    685
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2011
    Messages : 685
    Points : 1 418
    Points
    1 418
    Par défaut
    FAQ C++

    Et si tu suis bien le graphique tu devrais tomber sur ceci.


    Edit : @Neckara
    Nullius in verba

  4. #4
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 012
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 012
    Points : 23 145
    Points
    23 145
    Par défaut
    Bonjour,

    En C++ on utilisera std::list.

    EDIT : grillé par Kaamui

  5. #5
    Membre confirmé Avatar de LinuxUser
    Inscrit en
    Avril 2007
    Messages
    857
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 857
    Points : 616
    Points
    616
    Par défaut
    Je pense qu'il s'agit d'un exercice de TP dont le but est d'implémenter soit même les listes chainées plutôt que d'utiliser la STL.

  6. #6
    Membre régulier Avatar de devdeb91
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2013
    Messages
    246
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2013
    Messages : 246
    Points : 78
    Points
    78
    Par défaut
    ok merci pour ces informations je vais essayer ce container.

    Citation Envoyé par LinuxUser Voir le message
    Je pense qu'il s'agit d'un exercice de TP dont le but est d'implémenter soit même les listes chainées plutôt que d'utiliser la STL.
    non non loin de la c'est juste que j'ai remarquer que une liste chainée est peu etre mieux adapter qu'un tableau d'objet du coup je suis partie sur une liste chainée

  7. #7
    Membre confirmé Avatar de LinuxUser
    Inscrit en
    Avril 2007
    Messages
    857
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 857
    Points : 616
    Points
    616
    Par défaut
    Au temps pour moi, oublie ce que je viens d'écrire.

  8. #8
    Membre régulier Avatar de devdeb91
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2013
    Messages
    246
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2013
    Messages : 246
    Points : 78
    Points
    78
    Par défaut
    Citation Envoyé par Neckara Voir le message
    Bonjour,

    En C++ on utilisera std::list.

    EDIT : grillé par Kaamui
    std::list est bien mais si jamais je veut supprimer un element de la liste qui se trouve au milieu il n'y as pas de methode donc elle ne convient pas je l'avais deja vue ce matin on peut supprimer que le premier ou dernier element d'aprés se que j'ai compris

    Citation Envoyé par LinuxUser Voir le message
    Au temps pour moi, oublie ce que je viens d'écrire.
    pas de probleme

  9. #9
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 012
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 012
    Points : 23 145
    Points
    23 145
    Par défaut
    Citation Envoyé par devdeb91 Voir le message
    std::list est bien mais si jamais je veut supprimer un element de la liste qui se trouve au milieu il n'y as pas de methode donc elle ne convient pas je l'avais deja vue ce matin on peut supprimer que le premier ou dernier element d'aprés se que j'ai compris
    std::list est justement fait pour faire des insertions et des suppressions au milieu.
    Pour supprimer tu as une méthode erase.
    Après pour trouver l'élément à supprimer, tu peux parcourir ta liste mais il vaut mieux utiliser des algorithmes déjà existant.

  10. #10
    Membre régulier Avatar de devdeb91
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2013
    Messages
    246
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2013
    Messages : 246
    Points : 78
    Points
    78
    Par défaut
    Ok bah je vais voir tout ça merci

  11. #11
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 116
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 116
    Points : 32 968
    Points
    32 968
    Billets dans le blog
    4
    Par défaut
    Citation Envoyé par devdeb91 Voir le message
    std::list est bien mais si jamais je veut supprimer un element de la liste qui se trouve au milieu il n'y as pas de methode donc elle ne convient pas je l'avais deja vue ce matin on peut supprimer que le premier ou dernier element d'aprés se que j'ai compris
    C'est le principe même d'une liste chaînée, chaque maillon n'est reliée qu'au suivant et/ou précédent.
    A ne pas confondre avec le vector.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  12. #12
    Membre régulier Avatar de devdeb91
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2013
    Messages
    246
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2013
    Messages : 246
    Points : 78
    Points
    78
    Par défaut
    bon alors voila j'ai un peu utiliser std::list et deja je tien a dire qu'elle est remarquable.

    j'ai d'abord fait sa
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    std::list<int> mylist;
      std::list<int>::iterator it1,it2;
     
      // set some values:
      for (int i=1; i<10; ++i) mylist.push_back(i*10);
     
     
      it1 = it2 = mylist.begin(); 
      std::cout << *it2 << std::endl;
      advance (it2,6);
      std::cout << *it2 << std::endl;       
      ++it1;                    
     
    std::cout << *it1 << std::endl;
      it1 = mylist.erase (it1);   
      std::cout << *it1 << std::endl;
     
      it2 = mylist.erase (it2); 
     
      ++it1;                      
      --it2;         
     
      mylist.erase (it1,it2);
     
    it1 = mylist.begin();
      advance (it1, 4);
      std::cout << *it1 << std::endl;
      mylist.erase(it1);       
     
      std::cout << "mylist contains:";
      for (it1=mylist.begin(); it1!=mylist.end(); ++it1)
        std::cout << ' ' << *it1;
      std::cout << '\n';
    pour me familiariser un peu

    puis j'ai tenter ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    std::list<enemy> ennemi;
     
    ennemi.push_back(enemy("guepe", 100, 0, "poison", 10, 5));
     std::list<enemy>::iterator it1;
                   for(it1 = ennemi.begin(); it1 != ennemi.end(); it1++)
                   {
                       std::cout << *it1 << std::endl;
                   }
    et la c'est le drame au niveau de l'affichage de it1 il me balance cela

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    C:\Users\kevin\Desktop\list\main.cpp||In function 'int main()':|
    C:\Users\kevin\Desktop\list\main.cpp|49|error: cannot bind 'std::ostream {aka std::basic_ostream<char>}' lvalue to 'std::basic_ostream<char>&&'|
    c:\program files (x86)\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.7.1\include\c++\ostream|600|error:   initializing argument 1 of 'std::basic_ostream<_CharT, _Traits>& std::operator<<(std::basic_ostream<_CharT, _Traits>&&, const _Tp&) [with _CharT = char; _Traits = std::char_traits<char>; _Tp = enemy]'|
    ||=== Build finished: 2 errors, 0 warnings (0 minutes, 0 seconds) ===|
    donc j'ai 2 question :

    pourquoi ces erreurs bien que je pense un peu comprendre le sens ?

    et ensuite comment utiliser un element de la liste et ces methodes ?

  13. #13
    Expert éminent sénior

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 190
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 190
    Points : 17 146
    Points
    17 146
    Par défaut
    Tu as bien défini une fonction ostream& operator<<(ostream&, const enemy&), pour écrire un enemy dans un ostream?
    Mes principes de bases du codeur qui veut pouvoir dormir:
    • Une variable de moins est une source d'erreur en moins.
    • Un pointeur de moins est une montagne d'erreurs en moins.
    • Un copier-coller, ça doit se justifier... Deux, c'est un de trop.
    • jamais signifie "sauf si j'ai passé trois jours à prouver que je peux".
    • La plus sotte des questions est celle qu'on ne pose pas.
    Pour faire des graphes, essayez yEd.
    le ter nel est le titre porté par un de mes personnages de jeu de rôle

  14. #14
    Membre régulier Avatar de devdeb91
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2013
    Messages
    246
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2013
    Messages : 246
    Points : 78
    Points
    78
    Par défaut
    Non je ne l'ai pas fait

  15. #15
    Expert éminent sénior

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 190
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 190
    Points : 17 146
    Points
    17 146
    Par défaut
    Ton problème est là.

    pour un iterateur it donné, *it est une référence (constante si it est un const_iterator) sur un value_type de la collection référencée.

    Pour tout f de type truc, cout << f;, cout est un std::ostream, f un truc et "<<" la fonction operator<<(ostream&, const truc&), et l'expression entière est le ostream& retournée par la fonction.

    Normalement, cette fonction retourne son argument, modifiée pour l'affichage.

    par exemple, on peut écrire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    struct PI{}
    std::ostream& operator<<(std::ostream& os, const PI& pi) {
        return os<<3.14;
    }
    Mes principes de bases du codeur qui veut pouvoir dormir:
    • Une variable de moins est une source d'erreur en moins.
    • Un pointeur de moins est une montagne d'erreurs en moins.
    • Un copier-coller, ça doit se justifier... Deux, c'est un de trop.
    • jamais signifie "sauf si j'ai passé trois jours à prouver que je peux".
    • La plus sotte des questions est celle qu'on ne pose pas.
    Pour faire des graphes, essayez yEd.
    le ter nel est le titre porté par un de mes personnages de jeu de rôle

  16. #16
    Membre régulier Avatar de devdeb91
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2013
    Messages
    246
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2013
    Messages : 246
    Points : 78
    Points
    78
    Par défaut
    Donc si je comprends bien un truc dans ce genre devrait marcher
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    std::ostream& operator<<(std::ostream&, const Enemy & it1)
    return os<< it1.maMehtode();

  17. #17
    Expert éminent sénior

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 190
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 190
    Points : 17 146
    Points
    17 146
    Par défaut
    Citation Envoyé par devdeb91 Voir le message
    donc si je comprend bien un truc dans se genre devrai marcher

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    std::ostream& operator<<(std::ostream&, const Enemy & it1)
    return os<< it1.maMehtode();
    Oui, pour peu que la valeur de retour de Enemy::maMethode() possède bien son operator<<(). ce qui est vrai s'il est un type de base.

    Cela dit, comme argument, j'aurais utilisé le nom ennemy plutôt que it1.
    Mes principes de bases du codeur qui veut pouvoir dormir:
    • Une variable de moins est une source d'erreur en moins.
    • Un pointeur de moins est une montagne d'erreurs en moins.
    • Un copier-coller, ça doit se justifier... Deux, c'est un de trop.
    • jamais signifie "sauf si j'ai passé trois jours à prouver que je peux".
    • La plus sotte des questions est celle qu'on ne pose pas.
    Pour faire des graphes, essayez yEd.
    le ter nel est le titre porté par un de mes personnages de jeu de rôle

  18. #18
    Membre régulier Avatar de devdeb91
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2013
    Messages
    246
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2013
    Messages : 246
    Points : 78
    Points
    78
    Par défaut
    Bon alors voila je fait ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    #include <iostream>
    #include <list>
    #include "enemy.h"
     
    std::ostream& operator <<(std::ostream& os, enemy& it1) {
          return os<<it1.afficherinfo();
      }
     
    int main ()
    {
      /*std::list<int> mylist;
      std::list<int>::iterator it1,it2;
     
      // set some values:
      for (int i=1; i<10; ++i) mylist.push_back(i*10);
     
                                  // 10 20 30 40 50 60 70 80 90
      it1 = it2 = mylist.begin(); // ^^
      std::cout << *it2 << std::endl;
      advance (it2,6);
      std::cout << *it2 << std::endl;       // ^                 ^
      ++it1;                      //    ^              ^
     
    std::cout << *it1 << std::endl;
      it1 = mylist.erase (it1);   // 10 30 40 50 60 70 80 90
      std::cout << *it1 << std::endl;                            //    ^           ^
     
      it2 = mylist.erase (it2);   // 10 30 40 50 60 80 90
                                  //    ^           ^
     
      ++it1;                      //       ^        ^
      --it2;                      //       ^     ^
     
      mylist.erase (it1,it2);
     
    it1 = mylist.begin();
      advance (it1, 4);
      std::cout << *it1 << std::endl;
      mylist.erase(it1);        // 10 30 60 80 90
                                  //        ^
     
      std::cout << "mylist contains:";
      for (it1=mylist.begin(); it1!=mylist.end(); ++it1)
        std::cout << ' ' << *it1;
      std::cout << '\n';*/
     
    std::list<enemy> ennemi;
     
    ennemi.push_back(enemy("guepe", 100, 0, "poison", 10, 5));
     std::list<enemy>::iterator it1;
                   for(it1 = ennemi.begin(); it1 != ennemi.end(); it1++)
                   {
                       std::cout << *it1 << std::endl;
                   }
     
      return 0;
    }
    mais il me renvoie cela

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    C:\Users\kevin\Desktop\list\main.cpp||In function 'std::ostream& operator<<(std::ostream&, enemy&)':|
    C:\Users\kevin\Desktop\list\main.cpp|6|error: no match for 'operator<<' in 'os << (& it1)->enemy::afficherinfo()'|
    C:\Users\kevin\Desktop\list\main.cpp|6|note: candidates are:|
    c:\program files (x86)\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.7.1\include\c++\ostream|106|note: std::basic_ostream<_CharT, _Traits>::__ostream_type& std::basic_ostream<_CharT, _Traits>::operator<<(std::basic_ostream<_CharT, _Traits>::__ostream_type& (*)(std::basic_ostream<_CharT, _Traits>::__ostream_type&)) [with _CharT = char; _Traits = std::char_traits<char>; std::basic_ostream<_CharT, _Traits>::__ostream_type = std::basic_ostream<char>]|
    c:\program files (x86)\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.7.1\include\c++\ostream|106|note:   no known conversion for argument 1 from 'void' to 'std::basic_ostream<char>::__ostream_type& (*)(std::basic_ostream<char>::__ostream_type&) {aka std::basic_ostream<char>& (*)(std::basic_ostream<char>&)}'|
    c:\program files (x86)\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.7.1\include\c++\ostream|115|note: std::basic_ostream<_CharT, _Traits>::__ostream_type& std::basic_ostream<_CharT, _Traits>::operator<<(std::basic_ostream<_CharT, _Traits>::__ios_type& (*)(std::basic_ostream<_CharT, _Traits>::__ios_type&)) [with _CharT = char; _Traits = std::char_traits<char>; std::basic_ostream<_CharT, _Traits>::__ostream_type = std::basic_ostream<char>; std::basic_ostream<_CharT, _Traits>::__ios_type = std::basic_ios<char>]|
    c:\program files (x86)\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.7.1\include\c++\ostream|115|note:   no known conversion for argument 1 from 'void' to 'std::basic_ostream<char>::__ios_type& (*)(std::basic_ostream<char>::__ios_type&) {aka std::basic_ios<char>& (*)(std::basic_ios<char>&)}'|
    c:\program files (x86)\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.7.1\include\c++\ostream|125|note: std::basic_ostream<_CharT, _Traits>::__ostream_type& std::basic_ostream<_CharT, _Traits>::operator<<(std::ios_base& (*)(std::ios_base&)) [with _CharT = char; _Traits = std::char_traits<char>; std::basic_ostream<_CharT, _Traits>::__ostream_type = std::basic_ostream<char>]|
    c:\program files (x86)\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.7.1\include\c++\ostream|125|note:   no known conversion for argument 1 from 'void' to 'std::ios_base& (*)(std::ios_base&)'|
    c:\program files (x86)\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.7.1\include\c++\ostream|164|note: std::basic_ostream<_CharT, _Traits>::__ostream_type& std::basic_ostream<_CharT, _Traits>::operator<<(long int) [with _CharT = char; _Traits = std::char_traits<char>; std::basic_ostream<_CharT, _Traits>::__ostream_type = std::basic_ostream<char>]|
    c:\program files (x86)\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.7.1\include\c++\ostream|164|note:   no known conversion for argument 1 from 'void' to 'long int'|
    c:\program files (x86)\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.7.1\include\c++\ostream|168|note: std::basic_ostream<_CharT, _Traits>::__ostream_type& std::basic_ostream<_CharT, _Traits>::operator<<(long unsigned int) [with _CharT = char; _Traits = std::char_traits<char>; std::basic_ostream<_CharT, _Traits>::__ostream_type = std::basic_ostream<char>]|
    c:\program files (x86)\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.7.1\include\c++\ostream|168|note:   no known conversion for argument 1 from 'void' to 'long unsigned int'|
    c:\program files (x86)\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.7.1\include\c++\ostream|172|note: std::basic_ostream<_CharT, _Traits>::__ostream_type& std::basic_ostream<_CharT, _Traits>::operator<<(bool) [with _CharT = char; _Traits = std::char_traits<char>; std::basic_ostream<_CharT, _Traits>::__ostream_type = std::basic_ostream<char>]|
    c:\program files (x86)\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.7.1\include\c++\ostream|172|note:   no known conversion for argument 1 from 'void' to 'bool'|
    c:\program files (x86)\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.7.1\include\c++\bits\ostream.tcc|93|note: std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT, _Traits>::operator<<(short int) [with _CharT = char; _Traits = std::char_traits<char>]|
    c:\program files (x86)\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.7.1\include\c++\bits\ostream.tcc|93|note:   no known conversion for argument 1 from 'void' to 'short int'|
    c:\program files (x86)\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.7.1\include\c++\ostream|179|note: std::basic_ostream<_CharT, _Traits>::__ostream_type& std::basic_ostream<_CharT, _Traits>::operator<<(short unsigned int) [with _CharT = char; _Traits = std::char_traits<char>; std::basic_ostream<_CharT, _Traits>::__ostream_type = std::basic_ostream<char>]|
    c:\program files (x86)\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.7.1\include\c++\ostream|179|note:   no known conversion for argument 1 from 'void' to 'short unsigned int'|
    c:\program files (x86)\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.7.1\include\c++\bits\ostream.tcc|107|note: std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT, _Traits>::operator<<(int) [with _CharT = char; _Traits = std::char_traits<char>]|
    c:\program files (x86)\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.7.1\include\c++\bits\ostream.tcc|107|note:   no known conversion for argument 1 from 'void' to 'int'|
    c:\program files (x86)\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.7.1\include\c++\ostream|190|note: std::basic_ostream<_CharT, _Traits>::__ostream_type& std::basic_ostream<_CharT, _Traits>::operator<<(unsigned int) [with _CharT = char; _Traits = std::char_traits<char>; std::basic_ostream<_CharT, _Traits>::__ostream_type = std::basic_ostream<char>]|
    c:\program files (x86)\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.7.1\include\c++\ostream|190|note:   no known conversion for argument 1 from 'void' to 'unsigned int'|
    c:\program files (x86)\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.7.1\include\c++\ostream|199|note: std::basic_ostream<_CharT, _Traits>::__ostream_type& std::basic_ostream<_CharT, _Traits>::operator<<(long long int) [with _CharT = char; _Traits = std::char_traits<char>; std::basic_ostream<_CharT, _Traits>::__ostream_type = std::basic_ostream<char>]|
    c:\program files (x86)\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.7.1\include\c++\ostream|199|note:   no known conversion for argument 1 from 'void' to 'long long int'|
    c:\program files (x86)\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.7.1\include\c++\ostream|203|note: std::basic_ostream<_CharT, _Traits>::__ostream_type& std::basic_ostream<_CharT, _Traits>::operator<<(long long unsigned int) [with _CharT = char; _Traits = std::char_traits<char>; std::basic_ostream<_CharT, _Traits>::__ostream_type = std::basic_ostream<char>]|
    c:\program files (x86)\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.7.1\include\c++\ostream|203|note:   no known conversion for argument 1 from 'void' to 'long long unsigned int'|
    c:\program files (x86)\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.7.1\include\c++\ostream|218|note: std::basic_ostream<_CharT, _Traits>::__ostream_type& std::basic_ostream<_CharT, _Traits>::operator<<(double) [with _CharT = char; _Traits = std::char_traits<char>; std::basic_ostream<_CharT, _Traits>::__ostream_type = std::basic_ostream<char>]|
    c:\program files (x86)\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.7.1\include\c++\ostream|218|note:   no known conversion for argument 1 from 'void' to 'double'|
    c:\program files (x86)\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.7.1\include\c++\ostream|222|note: std::basic_ostream<_CharT, _Traits>::__ostream_type& std::basic_ostream<_CharT, _Traits>::operator<<(float) [with _CharT = char; _Traits = std::char_traits<char>; std::basic_ostream<_CharT, _Traits>::__ostream_type = std::basic_ostream<char>]|
    c:\program files (x86)\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.7.1\include\c++\ostream|222|note:   no known conversion for argument 1 from 'void' to 'float'|
    c:\program files (x86)\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.7.1\include\c++\ostream|230|note: std::basic_ostream<_CharT, _Traits>::__ostream_type& std::basic_ostream<_CharT, _Traits>::operator<<(long double) [with _CharT = char; _Traits = std::char_traits<char>; std::basic_ostream<_CharT, _Traits>::__ostream_type = std::basic_ostream<char>]|
    c:\program files (x86)\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.7.1\include\c++\ostream|230|note:   no known conversion for argument 1 from 'void' to 'long double'|
    c:\program files (x86)\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.7.1\include\c++\ostream|243|note: std::basic_ostream<_CharT, _Traits>::__ostream_type& std::basic_ostream<_CharT, _Traits>::operator<<(const void*) [with _CharT = char; _Traits = std::char_traits<char>; std::basic_ostream<_CharT, _Traits>::__ostream_type = std::basic_ostream<char>]|
    c:\program files (x86)\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.7.1\include\c++\ostream|243|note:   no known conversion for argument 1 from 'void' to 'const void*'|
    c:\program files (x86)\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.7.1\include\c++\bits\ostream.tcc|121|note: std::basic_ostream<_CharT, _Traits>& std::basic_ostream<_CharT, _Traits>::operator<<(std::basic_ostream<_CharT, _Traits>::__streambuf_type*) [with _CharT = char; _Traits = std::char_traits<char>; std::basic_ostream<_CharT, _Traits>::__streambuf_type = std::basic_streambuf<char>]|
    c:\program files (x86)\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.7.1\include\c++\bits\ostream.tcc|121|note:   no known conversion for argument 1 from 'void' to 'std::basic_ostream<char>::__streambuf_type* {aka std::basic_streambuf<char>*}'|
    C:\Users\kevin\Desktop\list\main.cpp|5|note: std::ostream& operator<<(std::ostream&, enemy&)|
    C:\Users\kevin\Desktop\list\main.cpp|5|note:   no known conversion for argument 2 from 'void' to 'enemy&'|
    c:\program files (x86)\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.7.1\include\c++\ostream|600|note: template<class _CharT, class _Traits, class _Tp> std::basic_ostream<_CharT, _Traits>& std::operator<<(std::basic_ostream<_CharT, _Traits>&&, const _Tp&)|
    c:\program files (x86)\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.7.1\include\c++\ostream|600|note:   template argument deduction/substitution failed:|
    C:\Users\kevin\Desktop\list\main.cpp|6|required from here|
    c:\program files (x86)\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.7.1\include\c++\ostream|600|error: forming reference to void|
    c:\program files (x86)\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.7.1\include\c++\ostream|546|note: template<class _Traits> std::basic_ostream<char, _Traits>& std::operator<<(std::basic_ostream<char, _Traits>&, const unsigned char*)|
    c:\program files (x86)\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.7.1\include\c++\ostream|546|note:   template argument deduction/substitution failed:|
    C:\Users\kevin\Desktop\list\main.cpp|6|note:   cannot convert '(& it1)->enemy::afficherinfo()' (type 'void') to type 'const unsigned char*'|
    c:\program files (x86)\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.7.1\include\c++\ostream|541|note: template<class _Traits> std::basic_ostream<char, _Traits>& std::operator<<(std::basic_ostream<char, _Traits>&, const signed char*)|
    c:\program files (x86)\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.7.1\include\c++\ostream|541|note:   template argument deduction/substitution failed:|
    C:\Users\kevin\Desktop\list\main.cpp|6|note:   cannot convert '(& it1)->enemy::afficherinfo()' (type 'void') to type 'const signed char*'|
    c:\program files (x86)\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.7.1\include\c++\ostream|528|note: template<class _Traits> std::basic_ostream<char, _Traits>& std::operator<<(std::basic_ostream<char, _Traits>&, const char*)|
    c:\program files (x86)\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.7.1\include\c++\ostream|528|note:   template argument deduction/substitution failed:|
    C:\Users\kevin\Desktop\list\main.cpp|6|note:   cannot convert '(& it1)->enemy::afficherinfo()' (type 'void') to type 'const char*'|
    c:\program files (x86)\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.7.1\include\c++\bits\ostream.tcc|323|note: template<class _CharT, class _Traits> std::basic_ostream<_CharT, _Traits>& std::operator<<(std::basic_ostream<_CharT, _Traits>&, const char*)|
    c:\program files (x86)\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.7.1\include\c++\bits\ostream.tcc|323|note:   template argument deduction/substitution failed:|
    C:\Users\kevin\Desktop\list\main.cpp|6|note:   cannot convert '(& it1)->enemy::afficherinfo()' (type 'void') to type 'const char*'|
    c:\program files (x86)\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.7.1\include\c++\ostream|511|note: template<class _CharT, class _Traits> std::basic_ostream<_CharT, _Traits>& std::operator<<(std::basic_ostream<_CharT, _Traits>&, const _CharT*)|
    c:\program files (x86)\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.7.1\include\c++\ostream|511|note:   template argument deduction/substitution failed:|
    C:\Users\kevin\Desktop\list\main.cpp|6|note:   mismatched types 'const _CharT*' and 'void'|
    c:\program files (x86)\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.7.1\include\c++\ostream|491|note: template<class _Traits> std::basic_ostream<char, _Traits>& std::operator<<(std::basic_ostream<char, _Traits>&, unsigned char)|
    c:\program files (x86)\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.7.1\include\c++\ostream|491|note:   template argument deduction/substitution failed:|
    C:\Users\kevin\Desktop\list\main.cpp|6|note:   cannot convert '(& it1)->enemy::afficherinfo()' (type 'void') to type 'unsigned char'|
    c:\program files (x86)\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.7.1\include\c++\ostream|486|note: template<class _Traits> std::basic_ostream<char, _Traits>& std::operator<<(std::basic_ostream<char, _Traits>&, signed char)|
    c:\program files (x86)\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.7.1\include\c++\ostream|486|note:   template argument deduction/substitution failed:|
    C:\Users\kevin\Desktop\list\main.cpp|6|note:   cannot convert '(& it1)->enemy::afficherinfo()' (type 'void') to type 'signed char'|
    c:\program files (x86)\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.7.1\include\c++\ostream|480|note: template<class _Traits> std::basic_ostream<char, _Traits>& std::operator<<(std::basic_ostream<char, _Traits>&, char)|
    c:\program files (x86)\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.7.1\include\c++\ostream|480|note:   template argument deduction/substitution failed:|
    C:\Users\kevin\Desktop\list\main.cpp|6|note:   cannot convert '(& it1)->enemy::afficherinfo()' (type 'void') to type 'char'|
    c:\program files (x86)\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.7.1\include\c++\ostream|474|note: template<class _CharT, class _Traits> std::basic_ostream<_CharT, _Traits>& std::operator<<(std::basic_ostream<_CharT, _Traits>&, char)|
    c:\program files (x86)\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.7.1\include\c++\ostream|474|note:   template argument deduction/substitution failed:|
    C:\Users\kevin\Desktop\list\main.cpp|6|note:   cannot convert '(& it1)->enemy::afficherinfo()' (type 'void') to type 'char'|
    c:\program files (x86)\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.7.1\include\c++\ostream|469|note: template<class _CharT, class _Traits> std::basic_ostream<_CharT, _Traits>& std::operator<<(std::basic_ostream<_CharT, _Traits>&, _CharT)|
    c:\program files (x86)\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.7.1\include\c++\ostream|469|note:   template argument deduction/substitution failed:|
    C:\Users\kevin\Desktop\list\main.cpp|6|note:   deduced conflicting types for parameter '_CharT' ('char' and 'void')|
    c:\program files (x86)\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.7.1\include\c++\bits\basic_string.h|2750|note: template<class _CharT, class _Traits, class _Alloc> std::basic_ostream<_CharT, _Traits>& std::operator<<(std::basic_ostream<_CharT, _Traits>&, const std::basic_string<_CharT, _Traits, _Alloc>&)|
    c:\program files (x86)\codeblocks\mingw\bin\..\lib\gcc\mingw32\4.7.1\include\c++\bits\basic_string.h|2750|note:   template argument deduction/substitution failed:|
    C:\Users\kevin\Desktop\list\main.cpp|6|note:   mismatched types 'const std::basic_string<_CharT, _Traits, _Alloc>' and 'void'|
    C:\Users\kevin\Desktop\list\main.cpp|7|warning: control reaches end of non-void function [-Wreturn-type]|
    ||=== Build finished: 2 errors, 2 warnings (0 minutes, 2 seconds) ===|
    ps : désoler mais moi et les operateurs sa fait 2

  19. #19
    Membre expert

    Avatar de germinolegrand
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Octobre 2010
    Messages
    738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Octobre 2010
    Messages : 738
    Points : 3 892
    Points
    3 892
    Par défaut
    L'erreur du compilateur nous dit que afficherInfo() renvoie void... ce qui est plutôt difficile à afficher à l'écran .

    Pure extrapolation de ma part, je suppose que afficherInfo contient un cout << info; or il ne doit pas toucher à cout, seulement renvoyer l'information.

  20. #20
    Membre régulier Avatar de devdeb91
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2013
    Messages
    246
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2013
    Messages : 246
    Points : 78
    Points
    78
    Par défaut
    Je vois mieux pourquoi du coup il faudrait une méthode qui renvoie quelque chose.

    mais n'y a t-il pas moyen que quand on fait cela

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    std::list<enemy>::iterator it1;
                   for(it1 = ennemi.begin(); it1 != ennemi.end(); it1++)
                   {
                       std::cout << *it1 << std::endl;
                   }
    plutôt que le std::cout on utilise it1 pour accéder au méthode ( exemple : it1.afficherinfo(); )

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Réponses: 12
    Dernier message: 08/02/2005, 23h42
  2. Bibliothèque de listes chainées
    Par gege2061 dans le forum C
    Réponses: 29
    Dernier message: 17/12/2004, 20h15
  3. copie de liste chainée
    Par tomsoyer dans le forum C++
    Réponses: 15
    Dernier message: 31/08/2004, 18h20
  4. Trie liste chaine
    Par Congru dans le forum C
    Réponses: 2
    Dernier message: 30/03/2004, 19h05
  5. tri de liste chainée
    Par RezzA dans le forum C
    Réponses: 7
    Dernier message: 26/01/2003, 20h25

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