Impulsar una excepción en tiempo de ejecución
-
23-08-2019 - |
Pregunta
El uso de este código:
#include <fstream>
#include <boost/archive/text_oarchive.hpp>
using namespace std;
int main()
{
std::ofstream ofs("c:\test");
boost::archive::text_oarchive oa(ofs);
}
Me estoy poniendo una excepción no controlada durante la ejecución de la ejecución de la línea de impulso archivo:
boost::exception_detail::clone_impl<boost::exception_detail::error_info_injector<boost::archive::archive_exception> >
Solución
La siguiente línea está en error:
std::ofstream ofs("c:\test");
El compilador hubiera escupido una advertencia (por lo menos) si el archivo se llama jest
; pero '\t'
- siendo el escape para la inserción de una ficha, su error no detectada pasa. En resumen, no se creará el archivo. Puede probar esto con:
if (ofs.good()) { ... }
Ahora, ya no se creó el archivo, usted no tiene un iterador válida para transmitir a boost::archive::text_oarchive
que arroja la excepción.
Prueba esto:
std::ofstream ofs("c:\\test");
// --^ (note the extra backslash)
if (ofs.good()) {
boost::archive::text_oarchive oa(ofs);
// ...
}
Espero que esto ayude!
PS: Una última nit yo no podía dejar de hacer - si se va a utilizar
using namespace std;
entonces
ofstream ofs("c:\\test");
es lo suficientemente bueno. Por supuesto, no es un error de calificar ofstream
, pero no sería el mejor estilo de codificación. Pero entonces, usted sepa con using namespace
es malo, ¿verdad?
PPS : Gracias - sharptooth
por recordarme que \t
le consigue una pestaña!
Otros consejos
Es necesario detectar la excepción y luego examinar su exception_code para ver cuál es la causa raíz es.