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> >
¿Fue útil?

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.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top