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 :

Compiler une liste chaînée


Sujet :

C++

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Mars 2013
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2013
    Messages : 4
    Par défaut Compiler une liste chaînée
    bonjour je suis débutant en c++ j’essaye de compiler mon programme mais ça ne marche pas svp j'ai besoin d'aide merci
    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
    #ifndef FLISTE_H
    #define FLISTE_H
    #include <iostream>
     
    class FListe
    {
      public:
         FListe();
        ~FListe();
        void creerListe();
        void ajouterElement(int val);
        void supprimerElement();
        void afficherListe();
        int nombreListe();
     
     
    private: 
     int p_premier;
     int quantite; 
     int nmbreElement; 
     Element *nouveau;
     Element *elm;  
     Element *p_suivant;  
     int val;   
     
     
    };
    #endif
    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
    #include <iostream>
    #include "FListe.h"
     
    using namespace std;
    const int FListe::nbreElement = 20;
     
    FListe::FListe(){p_premier=0;quantite=0;}
    FListe::~FListe()
    {
       while (this->p_premier!=0)     // Tant que la liste n'est pas vide
       {
          supprimerElement();
       }
          cout << "La liste a ete supprimee"<<endl;
    }
    void FListe::creerListe()
    {
      // L'utilisateur rentre les 20 éléments de la liste
      while (quantite<nbreElement)
        ajouterElement();
    }
    void FListe::ajouterElement(int val)
    {
      if(quantite<nbreElement)
      {
         // Création objet dynamique
         Element *nouveau=new Element;
     
         cout<<"Valeur = ";
         cin>>val;
         // On ajoute le nouvel élément en début de la liste
         nouveau->p_suivant = this-> p_premier;
         this->p_premier = nouveau;
         (this->quantite)++;      // On incrémente le nombre d'éléments dans la liste
      }
      else
      {
         cout<< "La liste ne peut contenir plus de "<<nbreElement<<" elements. ";
         cout<<"Vous devez en supprimer un pour en ajouter un autre."<<endl;
      }
    }
    void FListe::supprimerElement()
    {
       if (this->p_premier!=0)
       {
         Element* elm = this->p_premier;   // e pointe sur le 1er élément
         this->p_premier = elm->p_suivant;  // p_premier pointe sur le 2ième élément
         delete elm; // On supprime le 1er élément
         (this->quantite)--;  // On décrémente de 1 le nombre d'élément de la liste
       }
       else cout<<"Suppression impossible car la liste est vide"<<endl;
    }
    void FListe::afficherListe()
    {
      if (this->p_premier==0) cout <<"La liste est vide " <<endl;
      else
         cout << "Liste = " <<endl;
         for (Element *elm = this->p_premier; elm !=0; elm=elm->p_suivant)
            cout << elm->m_valeur << " ";
            cout <<endl;
    }
    // Nombre d'éléments dans la liste
    int FListe::nombreListe(){return this->quantite;}
    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
    #include <cstdlib>
    #include <iostream>
    #include "FListe.h"
     
    main()
    {
    cout<<"Debut de liste\n";
    FListe l;
    l.creerListe();
    l.afficherListe();
    cout<<"Fin de liste\n";
    l.supprimerElement();
     
        system("PAUSE");
        return 0;
    }

  2. #2
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Par défaut
    Bonjour,

    Pourrais tu préciser ce qui ne fonctionne pas ? Sans ça, il est moins aisé de t'aider.

    Merci,
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Mars 2013
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2013
    Messages : 4
    Par défaut
    quand je compile mon programme sa affiche une erreur dans main.cpp exactement sur #include "FListe.h" merci

  4. #4
    Membre Expert
    Avatar de imperio
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2010
    Messages
    871
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

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

    Informations forums :
    Inscription : Mai 2010
    Messages : 871
    Par défaut
    Et l'erreur complète ça donne quoi ?

  5. #5
    Membre Expert Avatar de fregolo52
    Homme Profil pro
    Développeur C
    Inscrit en
    Août 2004
    Messages
    2 366
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur C

    Informations forums :
    Inscription : Août 2004
    Messages : 2 366
    Par défaut
    Citation Envoyé par jvb55 Voir le message
    quand je compile mon programme sa affiche une erreur dans main.cpp exactement sur #include "FListe.h" merci
    Et ?
    Elle dit quoi l'erreur ? Fichier introuvable ? une définition introuvable dans ce .h ? ....
    Tu es sur quel OS ?

    (edit : grillé par imperio )

  6. #6
    Rédacteur/Modérateur


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

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 147
    Billets dans le blog
    4
    Par défaut
    Bonjour,

    il faudrait l'erreur complète pour savoir ce qu'il en est.

    Cependant, beaucoup d'erreurs dans ton code..
    nouveau est un Element*, et tu fais this->p_premier = nouveau; ou encore this->p_premier = p_suivant; Alors que p_premier est un... int !
    As-tu défini un opérateur d'affectation ou de transformation d'int vers Element* ? (fausse question : je suis sûr que non ).

    Connais-tu le principe de la liste chaînée ?
    Fort simple :
    Un noeud comporte une valeur, la donnée stockée, et un pointeur vers le noeud suivant.
    La tête peut n'être qu'un noeud parmi d'autre. Ou bien on peut encapsuler la liste complète dans une structure plus englobante.

    Pour créer une liste de stockage d'entiers, un noeud simple serait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    struct Node {
    int value;
    Node* pNext;
    };
    Mais le mieux étant encore d'utiliser std::list.
    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.

  7. #7
    Expert éminent

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    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 202
    Par défaut
    l'erreur, c'est que l'entête utilise le symbole Element, qui n'est ni inclus ni prédéclaré (forward declaration…).

    Cela dit, la réaction de Bousk est très juste.

  8. #8
    Futur Membre du Club
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Mars 2013
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2013
    Messages : 4
    Par défaut
    Merci pour votre aide, sa vaut dire qu'il fau que je déclare Élément:

    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
    #ifndef LISTE_H
    #define LISTE_H
    #include <iostream>
    using namespace std;
    struct Element
    { 
          int valeur;
          Element * p_suivent; 
          };
     
    class FListe 
    {
      public:
         FListe();
        ~FListe();
        void creerListe();
        void ajouterElement();
        void supprimerElement();
        void afficherListe();
        int nombreListe();
     
     
      private: 
     int nbreElement ;
     int p_premier;
     int quantite; 
     
     
    };
    #endif
    mes sa marche pas plus je comprend pas exactement et ou l'erreur

  9. #9
    Membre Expert Avatar de fregolo52
    Homme Profil pro
    Développeur C
    Inscrit en
    Août 2004
    Messages
    2 366
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur C

    Informations forums :
    Inscription : Août 2004
    Messages : 2 366
    Par défaut
    A part "ça marche pas", tu as quoi comme autre info ?

    Les compilateurs ne sont pas avare en information, contrairement à toi.

    Si tu veux qu'on t'aide il faudrait y mettre un peu plus de volonté. A part, mettre tous ton code dans un de mes projets, je ne suis pas capable de détecter rapidement l'erreur.

    Pourquoi avoir transformé cette partie ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
      private: 
     int nbreElement ;
     int p_premier;
     int quantite;
    Où est passé Element*

    oops, je n'avais pas vu !! Tu mélanges des pointeurs avec des entiers :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Element *nouveau=new Element; //pointeur
    this->p_premier = nouveau; // pointeur dans un entier !!!
    La visite de ce tutoriel s'impose pour comprendre la logique, c'est du C, après tu transposes en C++.

  10. #10
    Futur Membre du Club
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Mars 2013
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2013
    Messages : 4
    Par défaut
    Merci beaucoup pour voter aide ,j'ai bien compris le parnsipe merci a touts .
    mon programme marcher trés bien

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Inversion d'une liste chaînée
    Par sossomj dans le forum Pascal
    Réponses: 10
    Dernier message: 25/06/2006, 15h51
  2. select sur une liste chaînée
    Par wtfu dans le forum Langage SQL
    Réponses: 1
    Dernier message: 01/06/2006, 15h30
  3. Implémentation d'une liste chaînée
    Par Yux dans le forum C
    Réponses: 22
    Dernier message: 02/03/2006, 20h31
  4. Réponses: 16
    Dernier message: 19/11/2005, 16h47
  5. Insertion d'un noeud dans une liste chaînée
    Par habib106 dans le forum Assembleur
    Réponses: 8
    Dernier message: 07/04/2004, 22h34

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