Ver Mensaje Individual
  #45 (permalink)  
Antiguo 21/03/2016, 02:42
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++

Código C++:
Ver original
  1. bool update(const std::list<Persona>::iterator& p){

Cita:
ManPersonas.h:65:14: error: no match for ‘operator=’ (operand types are ‘Persona’ and ‘const iterator {aka const std::_List_iterator<Persona>}’)
Consejo general: dedica algunas horas a aprender C++.

¿Por qué lo digo? Tengo mis razones:
  • El & sirve para crear referencias. Una referencia tiene sentido si con ello evitas mover un volumen de datos importante o si necesitas modificar el estado de la variable y que dicho cambio sea visible fuera de la función. Un iterador es casi como un puntero y el tamaño que ocupa es mínimo (en el caso de std::list debería rondar los 8 bytes) luego no ganas nada pasando el dato por referencia. Si además indicas que la referencia es constante no podrás realizar cambios sobre dicha variable (de ahí el mensaje de error, que te está diciendo textualmente que no sabe cómo realizar una asignación sobre un objeto constante).
  • Pasar un entero como referencia constante es otro detalle que no tiene sentido por lo comentado anteriormente. No aporta nada.
  • Si no sabes usar las lambdas dedica un par de horas a estudiarlas. No son nada complicadas
  • Implementando el constructor por defecto en Persona te podrías ahorrar el método getPhantom. Entendiendo además cómo funcionan los constructores y cuándo son llamados verías que no es necesario en dicha función tener las siguientes líneas:
    Código C++:
    Ver original
    1. p.nom ="";
    2. p.ape ="";
  • Si getRow te devuelve un iterador es un suicidio asumir que dicho iterador va a ser siempre válido y tu lo estás asumiendo. Véase por ejemplo:
    Código C++:
    Ver original
    1. bool create(const Persona& p){
    2.         if(getRow(p.nom)->nom != ""){
  • No sabes leer los mensajes de error
  • No sabes usar el depurador de código

Y dado que soy el único que te responde yo de ti me plantearía si no estás abusando un poco de la situación. Quizás deberías poner más de tu parte o por lo menos que se note que estás intentando aprender de tus errores. Que no entiendas C++ es una excusa que sirve un tiempo pero después deja de tener validez. Hay infinidad de recursos en Internet donde explican gran parte de los entresijos de C++. Vale que C++ es complicado, pero aun así al menos yo no veo mejoras por tu parte.

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.