Ver Mensaje Individual
  #28 (permalink)  
Antiguo 14/03/2016, 15:09
Avatar de Instru
Instru
 
Fecha de Ingreso: noviembre-2002
Ubicación: Mexico
Mensajes: 2.751
Antigüedad: 21 años, 5 meses
Puntos: 52
Respuesta: headers, carpetas y menúes c++

Cita:
Iniciado por detective_jd Ver Mensaje
Hola ¿cómo están?, gracias por responder, créanme que si no me mareara tanto los punteros y los valores por referencia no pediría ayuda, además hice lo que me dijeron y me dan más errores, cómo dije anteriormente tanto en java como php no tengo este tipo de problemas pero con esto de los punteros y los parámetros por referencia sí, pongo el código:

Código C++:
Ver original
  1. #include <list>
  2. #include "Persona.h"
  3. #ifndef MANPERSONAS_H
  4. #define MANPERSONAS_H
  5. using namespace std;    
  6.     std::list<Persona*>lista;
  7.     static int maxIdP = 0;
  8.     int getMaxIdP(){
  9.         return ++maxIdP;
  10.     }
  11.     bool check(Persona& p){
  12.         if(p != nullptr){  // acá me da error por el objeto pasado por parámetro
  13.             for(Persona* per : lista){
  14.                 if(per->nom == p.nom){
  15.                     return true;
  16.                 }
  17.             }
  18.         }
  19.         return false;        
  20.     }
  21.     Persona* getRow(std::string xnom){
  22.         for(Persona* p : lista){
  23.             if(p->nom == xnom){
  24.                 return p;
  25.             }
  26.         }
  27.         return NULL;
  28.     }
  29.     Persona* getRow(int xid){
  30.         for(Persona* p : lista){
  31.             if(p->id == xid){
  32.                 return p;
  33.             }
  34.         }
  35.         return NULL;
  36.     }
  37.     bool create(Persona& p){  // acá me da error por el objeto pasado por parámetro
  38.         if(check(p)){            
  39.             return false;
  40.         }
  41.         else{
  42.             lista.push_back(p);  // acá me da error por el objeto pasado por parámetro
  43.             return true;
  44.         }
  45.     }
  46.     bool update(Persona& p){   // acá me da error por el objeto pasado por parámetro
  47.         Persona* per = getRow(p.id);
  48.         if(per->nom != &p.nom){  // acá me da error por mal uso de lo que me mencionan
  49.             if(check(p)){
  50.                 return false;
  51.             }
  52.         }
  53.         return true;
  54.     }
  55.     void deleted(Persona& p){
  56.         lista.remove(p);  // acá me da error por el objeto pasado por parámetro      
  57.     }
  58.     std::list<Persona*> read(){
  59.         return lista;        
  60.     }  
  61. #endif  /* MANPERSONAS_H */

Tampoco es la idea que me hagan la tarea, ya que esto es para mi primo que está haciendo ingeniería en electrotecnia, y me pide ayuda........
Lo de las validaciones lo tendré q ver bien cómo arreglármelas..

Espero sus respuestas y saludos.
Las referencias técnicamente nunca son nulas. Por lo tanto ese if ya no es necesario, incluso el compilador da error, el cual deberías leer.
Por otro lado, cuando usas referencias, no usas el operador -> que sólo aplica a punteros, usas el operador .(punto).

El push_back te da error porque creaste una lista de punteros, no de objetos. Quitale el * a la lista. Aquí sería interesante que tu o tu primo investigaran un poco sobre las semánticas de copiado y de movido.
También dentro de los for, no obtengas un puntero, obten una referencia al objeto. C++11 hace algo de magia y automáticamente usa semántica de movimiento, lo cual lo hace algo mas eficiente.
Hay un patrón de diseño llamada Null Object (objeto nulo). Revísenlo para ver el caso donde no se encuentre la persona. De hecho eferion ya te dijo masomenos como funciona.
Te recomiendo que uses const en los parametros que no modificas, que me parece son todos. Igual, eso ayuda al compilador a crear mejor código máquina.

Finalmente, ten en cuenta lo que menciona eferion. Es bueno ayudarte (aunque me ignoren ) y que termines tu aprendiendo. Que mal por tu primo, porque el mundo que viene exige soltura con la programación al igual que en el habla. En un futuro no muy lejano, no saber programar lo básica será lo mismo que ser analfabeta.