Hola eferion, gracias por responder, verás hice unos cambios al código, pero lo que me dijiste para sustituir el objeto no me funcionó, me dio raramente este error que tuve que comentar:
Consola:
g++ -c -g -std=c++11 -MMD -MP -MF "build/Debug/GNU-Linux-x86/main.o.d" -o build/Debug/GNU-Linux-x86/main.o main.cpp
In file included from crud_per.h:3:0,
from menu_per.h:2,
from main.cpp:2:
ManPersonas.h: In function ‘bool update(const iterator&)’:
ManPersonas.h:65:14: error: no match for ‘operator=’ (operand types are ‘Persona’ and ‘const iterator {aka const std::_List_iterator<Persona>}’)
*per = p; //-> lo que me dijiste me da el error de conversión desconocida
^
ManPersonas.h:65:14: note: candidates are:
In file included from ManPersonas.h:3:0,
from crud_per.h:3,
from menu_per.h:2,
from main.cpp:2:
Persona.h:4:8: note: Persona& Persona::operator=(const Persona&)
struct Persona{
^
Persona.h:4:8: note: no known conversion for argument 1 from ‘const iterator {aka const std::_List_iterator<Persona>}’ to ‘const Persona&’
Persona.h:4:8: note: Persona& Persona::operator=(Persona&&)
Persona.h:4:8: note: no known conversion for argument 1 from ‘const iterator {aka const std::_List_iterator<Persona>}’ to ‘Persona&&’
make[2]: *** [build/Debug/GNU-Linux-x86/main.o] Error 1
ManPersonas.h
Código C++:
Ver original#include <list>
#include <algorithm>
#include "Persona.h"
#include "Util.h"
#ifndef MANPERSONAS_H
#define MANPERSONAS_H
using namespace std;
std::list<Persona>lista;
int maxIdP = 0;
int getMaxIdP(){
return ++maxIdP;
}
// me parece que el fantasma será inútil ahora....
Persona getPhantom(){
Persona p;
p.id = 0;
p.nom ="";
p.ape ="";
return p;
}
/*
Persona getRow(std::string xnom){
for(Persona p : lista){
if(p.nom == xnom){
return p;
}
}
return getPhantom();
}*/
std::list<Persona>::iterator getRow(const std::string& xnom){
return std::find_if(lista.begin(),lista.end(),[&xnom](const Persona& p){
return p.nom == xnom;
});
}
std::list<Persona>::iterator getRow(int xid){
return std::find_if(lista.begin(),lista.end(),[&xid](const Persona& p){
return p.id == xid;
});
}
/*
Persona getRow(int xid){
for(Persona p : lista){
if(p.id == xid){
return p;
}
}
return getPhantom();
}*/
bool create(const Persona& p){
if(getRow(p.nom)->nom != ""){
return false;
}
else{
lista.push_back(p);
return true;
}
}
bool update(const std::list<Persona>::iterator& p){
std::list<Persona>::iterator per = getRow(p->id);
if(per->nom != p->nom){
if(getRow(p->nom)->nom != ""){
return false;
}
}
// *per = p; -> lo que me dijiste me da el error de conversión desconocida
return true;
}
void deleted(const std::list<Persona>::iterator& p){
lista.erase(p);
}
std::list<Persona> read(){
return lista;
}
#endif /* MANPERSONAS_H */
Por otro lado, haciendo pruebas al agregar un elemento, me salió esto de error:
Consola:
---CRUD Personas---
1. Crear Persona
2. Editar Persona
3. Borrar Persona
4. Mostrar Personas
5. Salir
intento nro 1 Ingrese Opción: 1
¿Desea crear una nueva persona? Aceptar=1/Cancelar=2 : 1
intento nro 1 Ingrese Nombre: juandy
intento nro 1 Ingrese Apelido: ocampo
RUN FINISHED; Segmentation fault; real time: 8s; user: 0ms; system: 0ms
crud_per.h - created
Código C++:
Ver originalvoid created(){
int op;
cout << "\n ¿Desea crear una nueva persona? Aceptar=1/Cancelar=2 : ";
cin >> op;
if(op == 1) {
Persona p;
p.id = getMaxIdP();
p.nom = addString("Nombre");
p.ape = addString("Apelido");
if(create(p)){
cout << "\n persona creada :)" << endl;
}
else {
cout << "\n la persona ya existe :(" << endl;
}
}
else if(op == 2) {
pause(2);
}
else {
cout << "\n error :(" << endl;
}
}
Espero sus respuestas y saludos