Aumentar a exceção em tempo de execução
-
23-08-2019 - |
Pergunta
Usando 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);
}
Estou recebendo uma exceção não tratada em tempo de execução em execução da linha de impulso arquivo:
boost::exception_detail::clone_impl<boost::exception_detail::error_info_injector<boost::archive::archive_exception> >
Solução
A linha a seguir está em erro:
std::ofstream ofs("c:\test");
O compilador teria cuspido um aviso (pelo menos) se o arquivo foi chamado jest
; mas '\t'
- sendo a fuga para a inserção de uma guia, o erro passa uncaught. Em suma, o arquivo não será criado. Você pode testar isso com:
if (ofs.good()) { ... }
Agora, desde que o arquivo não foi criado, você não tem um iterador válido para passar para boost::archive::text_oarchive
que lança a exceção.
Tente isto:
std::ofstream ofs("c:\\test");
// --^ (note the extra backslash)
if (ofs.good()) {
boost::archive::text_oarchive oa(ofs);
// ...
}
Espero que isso ajude!
PS: A nit final, eu não pude deixar de fazer - se você estiver indo para usar
using namespace std;
então
ofstream ofs("c:\\test");
é bom o suficiente. É claro, não é um erro de qualificar ofstream
, mas não seria o melhor estilo de codificação. Mas então, você sabe usando using namespace
é ruim, não é?
PPS : Obrigado - sharptooth
por me lembrar que \t
você recebe um guia!
Outras dicas
Você precisa capturar a exceção e, em seguida, examinar o seu exception_code para ver o que a causa raiz é.