Ya logre corregirlo, y estaba comparando posiciones no objetos por eso lo del puntero.
La verdad no se si sea por eso el problema pero lo unico que hice fue cambiar de linea la parte de
y quitarle la parte de
y pues ya lo probé con varias funciones y no dio fallos si hace su función correcta.
Este es el nuevo código y cambie el nombre de la variable x por pos para que haya confusión en mi lista.
Código C++:
Ver originaltemplate <class T>
nodo<T>* lista<T>::anterior(nodo<T> *pos){
nodo<T> *anterior,*p;
anterior=p=primero;
if(pos == primero){
return 0;
}else{
while(p->getSiguiente() != pos){
p=p->getSiguiente();
anterior=p;
}
return anterior;
}
}
Y eso de preocuparme cuando x apunta a algo que no esta en la lista ya esta, lo que pasa es que utilizo un método de búsqueda que retorna la posición del puntero o nodo si lo encuentra de ahí la posición la mando por ejemplo al método anterior y como ya se que si existe por que el método buscar ya me lo dijo pues continuo con las funciones, es decir que si la posición no existe o apunta a otra cosa nunca entrare al método anterior.
Muchas gracias a todos los que tuvieron el tiempo de leer y a los que respondieron y quisiera pedir su ayuda ahora para que me ayuden a resolver el otro problema que tengo con la forma de ordenar una lista ya esta un tema abierto con esa duda.