Para mí, el problema lo tienes en el planteamiento de la solución.
Puedes hacer una clase Nodo, aunque no creo que sea realmente necesario, pero el problema es que le estás poniendo acciones que no son propias del nodo, como apilar o desapilar. El nodo no se encarga de apilar, simplemente almacena información y tiene un puntero al siguiente elemento y, opcionalmente, al anterior.
Lo que tienes que hacer es una clase Pila (o Cola, según el caso) que sea la que se encargue de realizar esas operaciones. Así, la clase Pila debería tener un puntero al primer elemento, opcionalmente también al último (por cuestiones de eficiencia), y se encargaría de realizar la operaciones con los nodos.
Para que te hagas una idea:
Código:
class Pila{
private:
Nodo *primer;
Nodo *ultimo;
public:
boolean estaVacia();
void añadirNodo(Nodo nodo);
Nodo desapilar();
....
}
Posiblemente necesitaría un constructor para inicializar la pila.