Ho dato un'occhiata al volo e posso dirti che dovresti modificare la funzione stampa, perchè una volta modificata la variabile t che usi per contare gli elementi ti ritrovi con valori strani.
Usa semplicemente una nuova variabile, che inizializzerai al valore di t.

codice:
//stampa pila
void pila:: stampa(E & e){

   int x;

   x=t;
   
   while(x!=0){
      e=p[x-1];
      x--;
      cout<<" "<<e<<endl;
   }

}
Spero di essere stato chiaro