Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: amchacon en 27 Enero 2013, 12:24 pm



Título: Problema con las excepciones
Publicado por: amchacon en 27 Enero 2013, 12:24 pm
Vereis tengo una clase tal que asi:

Código
  1. using namespace std;
  2.  
  3. class Rar_File_Mising
  4. {
  5. private:
  6.    ifstream Lectura;
  7.    ofstream Escritura;
  8.    // Demas metodos y variables...
  9.  
  10. public:
  11.    // Constructor
  12.     Rar_File_Mising(const char* Nombre,bool Opcion);
  13.  
  14.    //Metodos
  15.  
  16.    string ListarArchivos();
  17.  
  18.    void Generar(const char* Nombre,vector<unsigned int> Numero);
  19.  
  20.   //...
  21.  
  22.   // Excepciones...
  23.  
  24.    struct Excepcion
  25.    {
  26.        unsigned int N_Error; // Codigo de error
  27.        string Mensaje; // Mensaje de error
  28.  
  29.        Excepcion(string mensaje,unsigned int Error) : Mensaje(Mensaje),N_Error(Error) {}; // Constructor
  30.    };
  31.  
  32.    // Destructor
  33.  
  34.    ~Rar_File_Mising();
  35.  
  36. };

Como veis, he definido una estructura para definir las excepciones que me puedan ocurrir. De forma que si ocurre algo inesperado:

Código
  1. if (!Lectura.is_open())
  2.        throw Excepcion("No hay ningun fichero abierto",ARCHIVO_NO_ABIERTO);

El problema esque no me las coge nunca en el bloque catch (ni siquiera en el bloque ...):

Código
  1. try
  2. {
  3.   Rar_File_Mising Nuevo(Nombre.c_str(),Opcion);
  4.   cout<<Nuevo.ListarArchivos();
  5. }
  6. catch(Rar_File_Mising::Excepcion &E)
  7. {
  8.    cout<<E.Mensaje<<endl;
  9. }
  10. catch(...)
  11. {
  12.     cout<<"???";
  13. }

¿Que es lo que puede pasar? Me acabo de cambiar al codeblocks hace poco, tengo que activar algo para que me admita las excepciones?


Título: Re: Problema con las excepciones
Publicado por: avesudra en 27 Enero 2013, 13:15 pm
Olvidalo , no se porque pasa :/ . Por codeblocks no creo que sea.
Código:
Aviso que no entiendo muy bien el uso de las sentencias try , catch y throw, pero digamos que throw tiene que lanzar algo ¿no? cuando en throw haces:
throw Excepcion("No hay ningun fichero abierto",ARCHIVO_NO_ABIERTO);
Pero esa función(constructor) solo le da valores a una estructura ya creada pero tú llamas al constructor sin estructura o eso parece no se.Fíjate aquí:
http://publib.boulder.ibm.com/infocenter/lnxpcomp/v8v101/index.jsp?topic=%2Fcom.ibm.xlcpp8l.doc%2Flanguage%2Fref%2Fcplr153.htm
Me parece a mi que eso habría que ponerlo así:
if (!Lectura.is_open())
    {
        Excepcion excepcion;
        excepcion.Excepcion("No hay ningun fichero abierto",ARCHIVO_NO_ABIERTO);
        throw excepcion;
    }
Igual la estoy liando no sé.
¡Un saludo!


Título: Re: Problema con las excepciones
Publicado por: naderST en 28 Enero 2013, 00:22 am
Código
  1. Excepcion(string mensaje,unsigned int Error) : Mensaje(Mensaje),N_Error(Error) {}; // Constructor

En esta linea deberías pasarle al constructor de Mensaje "mensaje" en minúscula. Quedando así:

Código
  1. Excepcion(string mensaje,unsigned int Error) : Mensaje(mensaje),N_Error(Error) {}; // Constructor

Además de eso, estás validando que lance la excepción? es decir, que no está abierto el archivo...


Título: Re: Problema con las excepciones
Publicado por: amchacon en 28 Enero 2013, 14:50 pm
Código
  1. Excepcion(string mensaje,unsigned int Error) : Mensaje(Mensaje),N_Error(Error) {}; // Constructor

En esta linea deberías pasarle al constructor de Mensaje "mensaje" en minúscula. Quedando así:

Código
  1. Excepcion(string mensaje,unsigned int Error) : Mensaje(mensaje),N_Error(Error) {}; // Constructor
Funciono a la perfección, gracias!