Ver Mensaje Individual
  #3 (permalink)  
Antiguo 01/04/2014, 09:38
DvNe
 
Fecha de Ingreso: octubre-2012
Mensajes: 37
Antigüedad: 12 años, 1 mes
Puntos: 0
Respuesta: Problema con set

USUARIO.H
Código C++:
Ver original
  1. #ifndef _USUARIO_H_
  2. #define _USUARIO_H_
  3.  
  4. #include "cadena.h"
  5. #include "clave.h"
  6. #include "articulo.h"
  7. #include <map>
  8. #include <set>
  9. using std::map;
  10. using std::set;
  11.  
  12. class Usuario {
  13.  public:
  14.   //CONSTRUCTOR Y DESTRUCTOR
  15.   Usuario (const Cadena&, const Cadena&, const Cadena&, const Cadena&, const char*);
  16.   //~Usuario(); Aún no esta hecho
  17.  
  18.   class Id_duplicado {
  19.   public:
  20.     Id_duplicado (const Cadena& id) : id_duplicado(id) {}
  21.     const Cadena idd() { return id_duplicado; }
  22.   private:
  23.     const Cadena id_duplicado;
  24.   };
  25.   //FUNCIONES OBSERVADORAS
  26.   Cadena id() const { return identificador_; }
  27.   Cadena nombre() const { return nombre_; }
  28.   Cadena apellidos() const { return apellidos_; }
  29.   Cadena direccion() const { return direccion_; }
  30.   Cadena password() const { return (*this).password_.clave(); }
  31.  
  32.   //FUNCIONES CON TARJETAS
  33.   /* Aún no implementadas
  34.   void es_titular_de(Tarjeta&);
  35.   void no_es_titular_de(Tarjeta&);
  36.   const Tarjetas& tarjetas() const;
  37.   */
  38.  
  39.   //FUNCIONES CON LOS ARTICULOS
  40.   typedef map<Articulo*, unsigned> Articulos;
  41.   void compra(Articulo&, unsigned);
  42.   const Articulos& compra() const { return articulos_; }
  43.   size_t n_articulos() const { return articulos_.size(); }
  44.  
  45.   //SOBRECARGA OPERADOR
  46.   friend std::ostream& operator << (std::ostream&, const Usuario&);
  47.  
  48.  private:
  49.   Cadena identificador_;
  50.   Cadena nombre_;
  51.   Cadena apellidos_;
  52.   Cadena direccion_;
  53.   Clave password_;
  54.   //  typedef map<Numero, Tarjeta*> Tarjetas;
  55.   //   Tarjetas tarjetas_;
  56.   Articulos articulos_;
  57.  
  58.   static set<Cadena> identificadores;
  59.   bool IdValido() const throw(Usuario::Id_duplicado);
  60.   Usuario (const Usuario&); //Deshabilitamos la copia de un usuario
  61. };
  62.  
  63. void mostrar_carro(const Usuario&); //Falta cambiarlo a flujo de salida
  64. //inline const Tarjetas& tarjetas() const { return tarjetas_; }
  65.  
  66. #endif

USUARIO.CPP
Código C++:
Ver original
  1. #include "usuario.h"
  2. #include <iostream>
  3. #include <iomanip>
  4.  
  5. using namespace std;
  6.  
  7. set<Cadena> Usuario::identificadores;
  8.  
  9. Usuario::Usuario (const Cadena& identificador, const Cadena& nombre, const Cadena& apellidos, const Cadena& direccion, const char* pass) : identificador_(identificador), nombre_( nombre), apellidos_(apellidos), direccion_(direccion), password_(pass) {
  10.  
  11.   IdValido();
  12. }
  13.  
  14. bool Usuario::IdValido() const throw(Usuario::Id_duplicado) {
  15.   pair<set<Cadena>::iterator,bool> i;
  16.  
  17.   i = identificadores.insert(id());
  18.   if (i.second == false) {
  19.     throw(Id_duplicado(id()));
  20.     return false;
  21.   } else {
  22.     return true;
  23.   }
  24. }

El problema creo que está seguro al 100% en la función IdValido(), puesto que si la pongo como comentario o hago que siempre haga return true; el programa funciona correctamente

Última edición por DvNe; 01/04/2014 a las 10:02