Ver Mensaje Individual
  #22 (permalink)  
Antiguo 13/03/2016, 17:38
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 check(Persona* p){        
  2.     for(Persona* per : lista){
  3.         if(per->nom == p->nom){
  4.             return true;
  5.         }
  6.     }
  7.     return false;        
  8. }

Si esa función recibe un puntero lo suyo es asegurarse de que el puntero es válido antes de hacer ninguna operación sobre el... salvo que quieras arriesgarte a que tu programa sufra una violación de segmento.

Código C++:
Ver original
  1. bool check(Persona* p){
  2.     if( nullptr != p ){
  3.       for(Persona* per : lista){
  4.           if(per->nom == p->nom){
  5.               return true;
  6.           }
  7.       }
  8.     }
  9.     return false;        
  10. }

Y esta norma es aplicable para toda función que reciba un puntero. Si la función nunca va a recibir un puntero no válido entonces lo suyo es que reciba una referencia o una referencia constante (dependiendo de si el objeto puede ser modificado dentro de la función o no).

Código C++:
Ver original
  1. bool check(Persona& p);
  2.  
  3. bool check(const Persona& p);

Cita:
Iniciado por detective_jd
Pensar que en java y php no tengo los problemas que estoy teniendo en c++ y me da bronca
Java y PHP manejan únicamente punteros solo que en vez de manejarlos con las manos descubiertas usan un recubrimiento especial. El mismo efecto puedes conseguir en C++ si usas smart pointers (shared_ptr, unique_ptr y weak_ptr). En concreto podríamos decir que tanto JAVA como PHP usan un pariente lejano de shared_ptr.

Cita:
Iniciado por detective_jd
que sugerencia me das con el check y con la validación de numeros????
Lo que te comenté anteriormente. Lee una cadena, después verifica que la cadena únicamente contiene números y finalmente convierte dicha cadena en un entero. Si el proceso falla (lo cual únicamente debería pasar en la verificación) entonces le vuelves a pedir el dato al usuario.

No hay que olvidar que C++ es un lenguaje multiusos no especializado en nada en particular. Además nació en una época muy anterior a la de los lenguajes de moda que ya vienen con librerías tremendamente completas. En C++ cosas tan tontas como crear una interfaz mínimamente seria en una consola puede obligarte a hacer más malabares que en el circo... pero gran parte de la culpa la tiene, yo creo, el momento en el que nació (y, por supuesto, que no tiene ninguna gran empresa detrás metiendo pasta como si no hubiera un mañana).

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.