Ver Mensaje Individual
  #37 (permalink)  
Antiguo 18/03/2016, 00:14
eferion
 
Fecha de Ingreso: octubre-2014
Ubicación: Madrid
Mensajes: 1.212
Antigüedad: 9 años, 7 meses
Puntos: 204
Respuesta: headers, carpetas y menúes c++

Para poder modificar el elemento de la lista fuera de la función getRow necesitas que dica función devuelva algo que lo permita.

Devolver por valor un objeto de tipo Persona como estás haciendo actualmente no es la solución porque ese objeto no está relacionado de ninguna forma con la lista. Es simplemente una copia del elemento que se encuentra en la lista y modificar la copia no altera para nada el original ya que no hay relación alguna entre ellos.

En estos casos puedes devolver un iterador o un puntero.

Devolver un iterador tiene como ventaja que permite modificar la lista (puedes añadir un elemento antes o después del actual, puedes eliminar el elemento de la lista, ...) mientras que las desventajas pasan porque los iteradores son muy inestables (a nada que se modifique la lista el iterador puede quedar invalidado), y que la sintaxis de la función es más compleja y dependiente del tipo de contenedor que uses, lo que puede provocar problemas de mantenimiento. En el caso de tener que devolver la posición de un elemento que no está en la lista lo usual es devolver lista.end().


Un puntero no permite borrar elementos de la lista (pero eso en tu caso no es un problema pues ya tienes un remove), pero sí que permite modificar el elemento apuntado. Además la firma de la función getRow será más limpia y estable. En el caso de devolver un elemento que no está en la lista lo usual es devolver un puntero nulo (puntero=nullptr).

Puedes usar cualquiera de las dos opciones y será una solución válida. En tus manos queda.

Un saludo.
__________________
La ayuda se paga con esfuerzo o con dinero. Si no estás dispuesto a esforzarte y quieres que te hagan los deberes pide presupuesto, al menos así ahorrarás tiempo.