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

A ver, he creado una clase usuario para gestionar usuarios que tengan un id único, es por esto que en la parte privada de mi clase he hecho la siguiente declaración:

Código C++:
Ver original
  1. 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
  1. set<Cadena> Usuario::identificadores;

Aquí muestro la función de construcción de usuario:

Código C++:
Ver original
  1. 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) {
  2.  
  3.   IdValido();
  4. }

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
  1. bool Usuario::IdValido() const throw(Usuario::Id_duplicado) {
  2.   pair<set<Cadena>::iterator,bool> i;
  3.  
  4.   i = identificadores.insert(id());
  5.   if (i.second == false) {
  6.     throw(Id_duplicado(id()));
  7.     return false;
  8.   } else {
  9.     return true;
  10.   }
  11. }

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?