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 :

construire une pile en c++


Sujet :

C++

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 152
    Points : 42
    Points
    42
    Par défaut construire une pile en c++
    Bonsoir, s'il vous plait j'essaye sans succès d'ecrire une pile en c++ j'ai ce code
    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
    89
    90
    91
    92
    93
    #include <stdio.h>
    #include <stdlib.h>
     
    typedef struct type_element
    			 { int valeur;
                   type_element *suivant;
                 }element;
    class pile
    {  
             public:
    element *suivant;
     
     
    // Fonction empiler
    element * empiler(element *LaPile,int val)
    { 
      element *elm;
     
      elm = (element *)malloc(sizeof(element));
      (*elm).valeur = val;
      (*elm).suivant = LaPile;
      LaPile = elm;
     
      return LaPile;
    };
     
     // Fonction depiler
    element * depiler(element *LaPile)
    { 
      element *elm;
     
      elm = LaPile;
      LaPile = (*LaPile).suivant;
      free(elm);
     
      return LaPile;
    };
     
     
    // Fonction afficherPile
    void afficherPile(element *LaPile)
    { element *p;
        int i;
    	 	p = LaPile;
    	 	printf("\n");
           if (p == NULL)
             printf("\n\tLa pile est vide.");
           else
            { while (((*p).suivant) != NULL)
    		   { printf("%d \n",(*p).valeur) ;
    		     printf("|\n");
     	         p = (*p).suivant;
               }
               printf("%d",(*p).valeur) ;
             } 
     
    };
     
     
     
    main()
    { 
      element *Pile; 
      int Nombre,n,stop,vale,i;
     
      printf("\nDonner le nombre d'elements de la Pile :");
      scanf("%d",&n);
     
      Pile = NULL;
      for (i=1; i<=n;i++) 
       { printf("\nDonner la valeur de l'element %d :", i);
         scanf("%d",&vale);
         Pile = empiler(Pile,vale);
       };
     
      afficherPile(Pile);
      printf("\n\nDonner le nombre d'elements que vous voulez depiler :\n");
      scanf("%d",&Nombre);
      while (Nombre> n)
       {  printf("\nLa pile ne contient que %d elements.\n Donner un autre nombre :",n);
         scanf("%d",&Nombre);
       };
       for (i=1;i<=Nombre;i++)
          Pile = depiler(Pile);
     
      printf("\nVoici la pile apres avoir depiler %d elements :\n",Nombre);
      afficherPile(Pile);
     
      printf("\n\nPour arreter le programme appuyer sur une touche puis sur <<Enter>>...");
      scanf("%d",&stop);
     
    }
    };
    mais quand je le compile j'ai cette erreur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
      [Linker error] undefined reference to `WinMain@16' 
      ld returned 1 exit status
    J'y comprend rien merci de me proposer une solution

  2. #2
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Points : 13 017
    Points
    13 017
    Par défaut
    Bonjour,
    Pour répondre très concrètement à ta question, tu as un projet Windows, et il te faudrait un projet console pour accepter une version standard du main (int main()). Cf F.A.Q.

    Une fois cela dit, le code que tu présentes est tout sauf du C++. Ce qui pique les yeux : malloc, printf, typedef struct, header en .h, aucune gestion des pointeurs dans la classe pile (destructeur, constructeur de copie, opérateur =, exceptions), pas vraiment d'encapsulation, etc.
    Bref, si c'est un TP pour un cours de C++, c'est mal parti. Si c'est pour du pro, cf la STL C++.
    Pour les détails voir les cours et tutoriels C++ : http://cpp.developpez.com/cours/cpp/ ou encore la FAQ C++ : http://cpp.developpez.com/cours/faq/

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 152
    Points : 42
    Points
    42
    Par défaut winmain ne resoud pas le problème
    J'ai remplacé main par winmain mais le problème reste intact j'ai toujours la meme erreur

  4. #4
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Points : 13 017
    Points
    13 017
    Par défaut
    La casse est importante. Et la solution la plus conforme est probablement de changer le type de projet en projet console en gardant un main

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

    Informations professionnelles :
    Activité : Développeur C

    Informations forums :
    Inscription : Août 2004
    Messages : 2 364
    Points : 5 378
    Points
    5 378
    Par défaut
    Peux-tu nous dire comment tu as créé ton projet ? Visual C++ ? Appli Console (j'en doute), appli Win32, appli MFC ?
    Pour une appli win32, le prototype est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    int APIENTRY _tWinMain(HINSTANCE hInstance,
                         HINSTANCE hPrevInstance,
                         LPTSTR    lpCmdLine,
                         int       nCmdShow)
    Pour une console (très classique) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int main(int argc, char* argv[])
    Et comme le dit 3DArchi, c'est un joli code en C, et pas du tout C++.

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 152
    Points : 42
    Points
    42
    Par défaut
    j'utilise dev C++ J'ai créé un projet de type console mais le problème reste le meme

    code:
    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
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    #include <cstdlib>
    #include <iostream>
    #include <stdio.h>
    #include <stdlib.h>
    using namespace std;
     
     
     
    typedef struct type_element
    			 { int valeur;
                   type_element *suivant;
                 }element;
    class pile
    {  
             public:
    element *suivant;
     
     
    // Fonction empiler
    element * empiler(element *LaPile,int val)
    { 
      element *elm;
     
      elm = (element *)malloc(sizeof(element));
      (*elm).valeur = val;
      (*elm).suivant = LaPile;
      LaPile = elm;
     
      return LaPile;
    };
     
     // Fonction depiler
    element * depiler(element *LaPile)
    { 
      element *elm;
     
      elm = LaPile;
      LaPile = (*LaPile).suivant;
      free(elm);
     
      return LaPile;
    };
     
     
    // Fonction afficherPile
    void afficherPile(element *LaPile)
    { element *p;
        int i;
    	 	p = LaPile;
    	 	printf("\n");
           if (p == NULL)
             printf("\n\tLa pile est vide.");
           else
            { while (((*p).suivant) != NULL)
    		   { printf("%d \n",(*p).valeur) ;
    		     printf("|\n");
     	         p = (*p).suivant;
               }
               printf("%d",(*p).valeur) ;
             } 
     
    };
     
     
     
    main()
    { 
      element *Pile; 
      int Nombre,n,stop,vale,i;
     
      printf("\nDonner le nombre d'elements de la Pile :");
      scanf("%d",&n);
     
      Pile = NULL;
      for (i=1; i<=n;i++) 
       { printf("\nDonner la valeur de l'element %d :", i);
         scanf("%d",&vale);
         Pile = empiler(Pile,vale);
       };
     
      afficherPile(Pile);
      printf("\n\nDonner le nombre d'elements que vous voulez depiler :\n");
      scanf("%d",&Nombre);
      while (Nombre> n)
       {  printf("\nLa pile ne contient que %d elements.\n Donner un autre nombre :",n);
         scanf("%d",&Nombre);
       };
       for (i=1;i<=Nombre;i++)
          Pile = depiler(Pile);
     
      printf("\nVoici la pile apres avoir depiler %d elements :\n",Nombre);
      afficherPile(Pile);
     
      printf("\n\nPour arreter le programme appuyer sur une touche puis sur <<Enter>>...");
      scanf("%d",&stop);
     
    }
    };
    erreur:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
     [Linker error] undefined reference to `WinMain@16' 
      ld returned 1 exit status 
     C:\Users\.....\Desktop\pile\Makefile.win [Build Error]  [pile.exe] Error 1

  7. #7
    Expert éminent sénior

    Avatar de dragonjoker59
    Homme Profil pro
    Software Developer
    Inscrit en
    Juin 2005
    Messages
    2 031
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Bas Rhin (Alsace)

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

    Informations forums :
    Inscription : Juin 2005
    Messages : 2 031
    Points : 11 476
    Points
    11 476
    Billets dans le blog
    11
    Par défaut
    tu as oublié le type de retour à ton main, de plus tu ne lui as pas mis les paramètres d'entrée.
    Remplace ta ligne
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int main( int argc, char ** argv)
    Si vous ne trouvez plus rien, cherchez autre chose...

    Vous trouverez ici des tutoriels OpenGL moderne.
    Mon moteur 3D: Castor 3D, presque utilisable (venez participer, il y a de la place)!
    Un projet qui ne sert à rien, mais qu'il est joli (des fois) : ProceduralGenerator (Génération procédurale d'images, et post-processing).

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 152
    Points : 42
    Points
    42
    Par défaut
    desolé meme en rajoutant le type de reour j'ai le meme problème

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

    Informations professionnelles :
    Activité : Développeur C

    Informations forums :
    Inscription : Août 2004
    Messages : 2 364
    Points : 5 378
    Points
    5 378
    Par défaut
    Humm ... Ca doit venir de gcc !!!
    Je n'en ai pas sous la main pour tester.
    et
    Ca donne quoi ?

    [Edit]
    Oups, WinMain@16 tu l'as aussi avec ton projet Console ?

  10. #10
    Invité
    Invité(e)
    Par défaut
    Tu definis ta fonction main dans ta classe pile. Il faut qu'elle soit globale :
    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
     
    // ce que tu as :
    class pile
    {
    // ......
         int main()
         {
           // ......
         }
    };
     
    // ce qu'il faut :
    class pile
    {
    // ......
    };
     
    int main()
    {
    // ......
    }
    Aussi, quand tu defini tes fonctions, le point-virgule n'est pas correcte après la '}'

    EDIT : De meme, les '}' fermant les boucles for et while n'ont pas besoin d'etre suivies d'un point-virgule.

  11. #11
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 614
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 614
    Points : 30 626
    Points
    30 626
    Par défaut
    Salut
    Citation Envoyé par Joe Dralliam Voir le message
    Aussi, quand tu defini tes fonctions, le point-virgule n'est pas correcte après la '}'

    EDIT : De meme, les '}' fermant les boucles for et while n'ont pas besoin d'etre suivies d'un point-virgule.
    En fait, c'est plus compliqué que cela...

    le ; est nécessaire après l'accolade fermante lorsque l'on a affaire à:
    • une définition de classe,
    • une définition de structure,
    • une définition d'union
    • une définition d'énumération
    Il est également nécessaire après la parenthèse fermante de la condition d'une boucle do... while (et bien sur, à la fin de chaque instruction )

    Il n'est pas nécessaire de le mettre après l'accolade fermante dans les autres circonstances, mais, comme c'est le délimiteur de fin d'instruction, on peut parfaitement le placer. Il ne sera alors simplement pas pris en compte

    Un code proche de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    #include <iostream>
     
    using namespace std;
     
    int main()
    {
        cout<<"hello world"<<endl;
        ;;;;;
        return 0;;;
     
    };;;
    est en effet tout à fait valide, bien qu'il faille avouer que la présence des ; surnuméraires n'apportent strictement rien, si ce n'est une difficulté supplémentaire à la lecture
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  12. #12
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 152
    Points : 42
    Points
    42
    Par défaut
    j'ai meme divisé en deux classes mais rien n'y fait j'ai toujours le meme problème
    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
    89
    90
    91
    92
    93
    94
    95
    96
     
    #include <stdio.h>
    #include <stdlib.h>
     
    typedef struct type_element
    			 { int valeur;
                   type_element *suivant;
                 }element;
    class pile
    {  
             public:
    element *suivant;
     
     
    // Fonction empiler
    element * empiler(element *LaPile,int val)
    { 
      element *elm;
     
      elm = (element *)malloc(sizeof(element));
      (*elm).valeur = val;
      (*elm).suivant = LaPile;
      LaPile = elm;
     
      return LaPile;
    };
     
     // Fonction depiler
    element * depiler(element *LaPile)
    { 
      element *elm;
     
      elm = LaPile;
      LaPile = (*LaPile).suivant;
      free(elm);
     
      return LaPile;
    };
     
     
    // Fonction afficherPile
    void afficherPile(element *LaPile)
    { element *p;
        int i;
    	 	p = LaPile;
    	 	printf("\n");
           if (p == NULL)
             printf("\n\tLa pile est vide.");
           else
            { while (((*p).suivant) != NULL)
    		   { printf("%d \n",(*p).valeur) ;
    		     printf("|\n");
     	         p = (*p).suivant;
               }
               printf("%d",(*p).valeur) ;
             } 
     
    };
     
     };
    class principal :public pile
    {
     
    main()
    { 
      element *Pile; 
      int Nombre,n,stop,vale,i;
     
      printf("\nDonner le nombre d'elements de la Pile :");
      scanf("%d",&n);
     
      Pile = NULL;
      for (i=1; i<=n;i++) 
       { printf("\nDonner la valeur de l'element %d :", i);
         scanf("%d",&vale);
         Pile = empiler(Pile,vale);
       };
     
      afficherPile(Pile);
      printf("\n\nDonner le nombre d'elements que vous voulez depiler :\n");
      scanf("%d",&Nombre);
      while (Nombre> n)
       {  printf("\nLa pile ne contient que %d elements.\n Donner un autre nombre :",n);
         scanf("%d",&Nombre);
       };
       for (i=1;i<=Nombre;i++)
          Pile = depiler(Pile);
     
      printf("\nVoici la pile apres avoir depiler %d elements :\n",Nombre);
      afficherPile(Pile);
     
      printf("\n\nPour arreter le programme appuyer sur une touche puis sur <<Enter>>...");
      scanf("%d",&stop);
     
    }
    };

  13. #13
    Invité
    Invité(e)
    Par défaut
    Non ! Le main doit être hors de toutes classes(il doit etre libre). Et puis vu qu'on est pas en C, utilise l'une des deux écritures citées précédemment :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    int main() { /*... */ }
    //ou
    int main(int argc, char** argv) { /* ... */ }
    D'autre part, ne commence pas à utiliser l'héritage n'importe où et n'importe comment !

    Une autre habitude "inutile" héritée du C est d'écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    typedef struct{ /* ... */ } maStruct;
    Ecris plutot :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    struct maStruct { /* ...  */ };

  14. #14
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 152
    Points : 42
    Points
    42
    Par défaut
    si je mets le main hors de la classe toutes mes methodes de la classes deviennent invisibles on me demande de les declarer

  15. #15
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Points : 13 017
    Points
    13 017
    Par défaut
    Ce code compile :
    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
    #include <stdio.h>
    #include <stdlib.h>
     
    typedef struct type_element
    			 { int valeur;
                   type_element *suivant;
                 }element;
     
    // Fonction empiler
    element * empiler(element *LaPile,int val)
    { 
      element *elm;
     
      elm = (element *)malloc(sizeof(element));
      (*elm).valeur = val;
      (*elm).suivant = LaPile;
      LaPile = elm;
     
      return LaPile;
    };
     
     // Fonction depiler
    element * depiler(element *LaPile)
    { 
      element *elm;
     
      elm = LaPile;
      LaPile = (*LaPile).suivant;
      free(elm);
     
      return LaPile;
    };
     
     
    // Fonction afficherPile
    void afficherPile(element *LaPile)
    { element *p;
        int i;
    	 	p = LaPile;
    	 	printf("\n");
           if (p == NULL)
             printf("\n\tLa pile est vide.");
           else
            { while (((*p).suivant) != NULL)
    		   { printf("%d \n",(*p).valeur) ;
    		     printf("|\n");
     	         p = (*p).suivant;
               }
               printf("%d",(*p).valeur) ;
             } 
     
    };
     
     
     
    int main()
    { 
      element *Pile; 
      int Nombre,n,stop,vale,i;
     
      printf("\nDonner le nombre d'elements de la Pile :");
      scanf("%d",&n);
     
      Pile = NULL;
      for (i=1; i<=n;i++) 
       { printf("\nDonner la valeur de l'element %d :", i);
         scanf("%d",&vale);
         Pile = empiler(Pile,vale);
       };
     
      afficherPile(Pile);
      printf("\n\nDonner le nombre d'elements que vous voulez depiler :\n");
      scanf("%d",&Nombre);
      while (Nombre> n)
       {  printf("\nLa pile ne contient que %d elements.\n Donner un autre nombre :",n);
         scanf("%d",&Nombre);
       };
       for (i=1;i<=Nombre;i++)
          Pile = depiler(Pile);
     
      printf("\nVoici la pile apres avoir depiler %d elements :\n",Nombre);
      afficherPile(Pile);
     
      printf("\n\nPour arreter le programme appuyer sur une touche puis sur <<Enter>>...");
      scanf("%d",&stop);
     
    }
    En revanche, ce n'est que du C (non relu).
    Si tu veux le faire en C++, commence par lire : Comment débuter en C++ ? par Alp Mestan
    puis : Penser en C++ volume 1 par Bruce Eckel
    et poursuit par les autres tutoriels et cours de C++.

    Tout dans le code que tu nous a montré indique que tu ne connais rien au C++. Donc, n'hésites pas à consulter ces cours et tutoriels pour apprendre

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

    Informations professionnelles :
    Activité : Développeur C

    Informations forums :
    Inscription : Août 2004
    Messages : 2 364
    Points : 5 378
    Points
    5 378
    Par défaut
    J'avais pas bien vu !!
    Ton souci "undefined reference to `WinMain@16' " est lié au fait que ton programme n'a pas de fonction main.

    Dans ton code main est une méthode de la classe pile.

    Dans ton dernier message, ton main ne connais pas la classe Pile.
    Voici un code (pas propre) qui compile, basé sur ton 1er message (et évite de mettre tout le code de la classe dans les déclarations ) :
    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
    89
    90
    91
    92
    93
    94
    95
    96
    97
    #include <stdio.h>
    #include <stdlib.h>
     
    typedef struct type_element
    			 { int valeur;
                   type_element *suivant;
                 }element;
     
    class pile
    {
             public:
    element *suivant;
    element * empiler(element *LaPile,int val);
    element * depiler(element *LaPile);
    void afficherPile(element *LaPile);
    };
    // Fonction empiler
    element * pile::empiler(element *LaPile,int val)
    {
      element *elm;
     
      elm = (element *)malloc(sizeof(element));
      (*elm).valeur = val;
      (*elm).suivant = LaPile;
      LaPile = elm;
     
      return LaPile;
    };
     
     // Fonction depiler
    element * pile::depiler(element *LaPile)
    {
      element *elm;
     
      elm = LaPile;
      LaPile = (*LaPile).suivant;
      free(elm);
     
      return LaPile;
    };
     
     
    // Fonction afficherPile
    void pile::afficherPile(element *LaPile)
    { element *p;
        int i;
    	 	p = LaPile;
    	 	printf("\n");
           if (p == NULL)
             printf("\n\tLa pile est vide.");
           else
            { while (((*p).suivant) != NULL)
    		   { printf("%d \n",(*p).valeur) ;
    		     printf("|\n");
     	         p = (*p).suivant;
               }
               printf("%d",(*p).valeur) ;
             }
     
    };
     
     
     
    int main(void)
    {
      element *Pile;
      int Nombre,n,stop,vale,i;
     
      pile maPile;
     
      printf("\nDonner le nombre d'elements de la Pile :");
      scanf("%d",&n);
     
      Pile = NULL;
      for (i=1; i<=n;i++)
       { printf("\nDonner la valeur de l'element %d :", i);
         scanf("%d",&vale);
         Pile = maPile.empiler(Pile,vale);
       };
     
      maPile.afficherPile(Pile);
      printf("\n\nDonner le nombre d'elements que vous voulez depiler :\n");
      scanf("%d",&Nombre);
      while (Nombre> n)
       {  printf("\nLa pile ne contient que %d elements.\n Donner un autre nombre :",n);
         scanf("%d",&Nombre);
       };
       for (i=1;i<=Nombre;i++)
          Pile = maPile.depiler(Pile);
     
      printf("\nVoici la pile apres avoir depiler %d elements :\n",Nombre);
      maPile.afficherPile(Pile);
     
      printf("\n\nPour arreter le programme appuyer sur une touche puis sur <<Enter>>...");
      scanf("%d",&stop);
     
    }
    Je te conseille très fortement d'aller faire un tour sur les liens de 3DArchi, les cours et tutoriels C++ : http://cpp.developpez.com/cours/cpp/

    [edit] La structure de ton code ressemble à du java (fonction main dans une classe). Tu as déjà fait du java ?

Discussions similaires

  1. intersection et union d'une pile
    Par harris_macken dans le forum Algorithmes et structures de données
    Réponses: 12
    Dernier message: 20/10/2005, 09h31
  2. comment construire une interface comme une pomme...
    Par redanium dans le forum C++Builder
    Réponses: 3
    Dernier message: 29/10/2004, 15h35
  3. [MIB] Questions pour construire une mib
    Par fadoua dans le forum Développement
    Réponses: 4
    Dernier message: 11/03/2004, 10h47
  4. Difficulté à construire une requête
    Par coolcpu dans le forum Langage SQL
    Réponses: 6
    Dernier message: 08/10/2003, 00h43

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