Bonjour

Je souhaite programmer moi même une fonction pop et push.
Dans un premier temps je fais autant de push que de pop pour eviter toute erreur de chaine vide.

Cependant le code ci dessous me renvoi toujours le premier élément ajouté.
Je ne comprends malheureusement pas mon erreur.

Ma classe

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
#ifndef PILE_H
#define PILE_H
 
 
class Pile
{
    public:
        Pile();
        virtual ~Pile();
 
        int valeur; //Valeur de l'element courant
        Pile *prec; //Pointeur sur l'element précedent
 
 
        int Pop(Pile *p);
        void Push(Pile *p, int Val);
 
    protected:
    private:
 
};
 
#endif // PILE_H
Mes fonctions pop et push
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
 
int Pile::Pop(Pile *p)
{
        int Val;
        Pile *tmp=NULL;
 
        tmp = p->prec;
        Val = p->valeur;
 
         /* Le pointeur pointe sur l'element precedent */
        p = tmp;
 
        return Val;     /* Retourne la valeur soutirée de la pile. */
}
 
void  Pile::Push(Pile *p, int Val)
{
        Pile *newelement=NULL;
 
        newelement = new Pile;
        newelement->valeur = Val;
        newelement->prec = p;
 
        p = newelement;
 
 
}
Mon main

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
#include "Pile.h"
#include <iostream>
 
using namespace std;
 
int main()
{
    Pile a;
    a.prec=NULL;
    a.valeur=5;
 
    a.Push(&a,6);
    a.Push(&a,7);
    a.Push(&a,8);
 
    cout << a.Pop(&a) << a.Pop(&a) << a.Pop(&a) << a.Pop(&a) <<endl;
    return 0;
}
Après exécution j'obtiens 5555

Si quelqu'un pouvait m'aider à déterminer ce que je fais de travers je lui en serai extrêmement reconnaissant.