Ver Mensaje Individual
  #43 (permalink)  
Antiguo 19/03/2016, 21:04
Avatar de detective_jd
detective_jd
 
Fecha de Ingreso: abril-2011
Ubicación: Salto
Mensajes: 437
Antigüedad: 13 años, 1 mes
Puntos: 6
Respuesta: headers, carpetas y menúes c++

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
  1. #include <list>
  2. #include <algorithm>
  3. #include "Persona.h"
  4. #include "Util.h"
  5. #ifndef MANPERSONAS_H
  6. #define MANPERSONAS_H
  7. using namespace std;    
  8.     std::list<Persona>lista;
  9.     int maxIdP = 0;
  10.     int getMaxIdP(){
  11.         return ++maxIdP;
  12.     }
  13.     // me parece que el fantasma será inútil ahora....
  14.     Persona getPhantom(){
  15.         Persona p;
  16.         p.id = 0;
  17.         p.nom ="";
  18.         p.ape ="";
  19.         return p;
  20.     }
  21.     /*
  22.     Persona getRow(std::string xnom){
  23.         for(Persona p : lista){
  24.             if(p.nom == xnom){
  25.                 return p;
  26.             }
  27.         }
  28.         return getPhantom();
  29.     }*/
  30.     std::list<Persona>::iterator getRow(const std::string& xnom){
  31.         return std::find_if(lista.begin(),lista.end(),[&xnom](const Persona& p){
  32.             return p.nom == xnom;
  33.         });
  34.     }
  35.     std::list<Persona>::iterator getRow(int xid){
  36.         return std::find_if(lista.begin(),lista.end(),[&xid](const Persona& p){
  37.             return p.id == xid;
  38.         });
  39.     }
  40.     /*
  41.     Persona getRow(int xid){
  42.         for(Persona p : lista){
  43.             if(p.id == xid){
  44.                 return p;
  45.             }
  46.         }
  47.         return getPhantom();
  48.     }*/
  49.     bool create(const Persona& p){
  50.         if(getRow(p.nom)->nom != ""){
  51.             return false;
  52.         }
  53.         else{
  54.             lista.push_back(p);            
  55.             return true;
  56.         }
  57.     }
  58.     bool update(const std::list<Persona>::iterator& p){
  59.         std::list<Persona>::iterator per = getRow(p->id);
  60.         if(per->nom != p->nom){
  61.             if(getRow(p->nom)->nom != ""){
  62.                 return false;
  63.             }
  64.         }
  65.        // *per = p; -> lo que me dijiste me da el error de conversión desconocida
  66.         return true;        
  67.     }
  68.     void deleted(const std::list<Persona>::iterator& p){
  69.         lista.erase(p);
  70.     }
  71.     std::list<Persona> read(){
  72.         return lista;        
  73.     }  
  74. #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 original
  1. void created(){
  2.     int op;
  3.     cout << "\n ¿Desea crear una nueva persona? Aceptar=1/Cancelar=2 : ";
  4.     cin >> op;
  5.     if(op == 1) {
  6.         Persona p;
  7.         p.id = getMaxIdP();
  8.         p.nom = addString("Nombre");
  9.         p.ape = addString("Apelido");
  10.         if(create(p)){
  11.             cout << "\n persona creada :)" << endl;            
  12.         }
  13.         else {
  14.             cout << "\n la persona ya existe :(" << endl;
  15.         }                        
  16.     }
  17.     else if(op == 2) {        
  18.         pause(2);
  19.     }
  20.     else {
  21.         cout << "\n error :(" << endl;
  22.     }
  23. }

Espero sus respuestas y saludos