USUARIO.H
Código C++:
Ver original#ifndef _USUARIO_H_
#define _USUARIO_H_
#include "cadena.h"
#include "clave.h"
#include "articulo.h"
#include <map>
#include <set>
using std::map;
using std::set;
class Usuario {
public:
//CONSTRUCTOR Y DESTRUCTOR
Usuario (const Cadena&, const Cadena&, const Cadena&, const Cadena&, const char*);
//~Usuario(); Aún no esta hecho
class Id_duplicado {
public:
Id_duplicado (const Cadena& id) : id_duplicado(id) {}
const Cadena idd() { return id_duplicado; }
private:
const Cadena id_duplicado;
};
//FUNCIONES OBSERVADORAS
Cadena id() const { return identificador_; }
Cadena nombre() const { return nombre_; }
Cadena apellidos() const { return apellidos_; }
Cadena direccion() const { return direccion_; }
Cadena password() const { return (*this).password_.clave(); }
//FUNCIONES CON TARJETAS
/* Aún no implementadas
void es_titular_de(Tarjeta&);
void no_es_titular_de(Tarjeta&);
const Tarjetas& tarjetas() const;
*/
//FUNCIONES CON LOS ARTICULOS
typedef map<Articulo*, unsigned> Articulos;
void compra(Articulo&, unsigned);
const Articulos& compra() const { return articulos_; }
size_t n_articulos() const { return articulos_.size(); }
//SOBRECARGA OPERADOR
friend std::ostream& operator << (std::ostream&, const Usuario&);
private:
Cadena identificador_;
Cadena nombre_;
Cadena apellidos_;
Cadena direccion_;
Clave password_;
// typedef map<Numero, Tarjeta*> Tarjetas;
// Tarjetas tarjetas_;
Articulos articulos_;
static set<Cadena> identificadores;
bool IdValido() const throw(Usuario::Id_duplicado);
Usuario (const Usuario&); //Deshabilitamos la copia de un usuario
};
void mostrar_carro(const Usuario&); //Falta cambiarlo a flujo de salida
//inline const Tarjetas& tarjetas() const { return tarjetas_; }
#endif
USUARIO.CPP
Código C++:
Ver original#include "usuario.h"
#include <iostream>
#include <iomanip>
using namespace std;
set<Cadena> Usuario::identificadores;
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) {
IdValido();
}
bool Usuario::IdValido() const throw(Usuario::Id_duplicado) {
pair<set<Cadena>::iterator,bool> i;
i = identificadores.insert(id());
if (i.second == false) {
throw(Id_duplicado(id()));
return false;
} else {
return true;
}
}
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