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++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 152
    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
    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 confirmé
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 152
    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
    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
    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
    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 confirmé
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 152
    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

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