Código C++:
Ver original
static set<Cadena> identificadores;
(El tipo cadena es una clase que he creado, que tiene las mismas características que un string).
Esta variable estática se inicializa a parte en un .cpp del siguiente modo:
Código C++:
Ver original
set<Cadena> Usuario::identificadores;
Aquí muestro la función de construcción de usuario:
Código C++:
Ver original
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(); }
y aquí la función IdValido() que la idea principal es que ya que, según lei, set::insert devuelve un tipo pair formado por un iterador y un tipo bool, inserto el id nuevo y si existe pues se lanza una excepción y si no existe pues se agrega el nuevo usuario:
Código C++:
Ver original
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; } }
Si compilo (compilando con g++ en Linux), obtengo un bad_alloc y según he estado viendo se produce al entrar a la función IdValido(). ¿Alguien me puede decir la razón?