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> >
Foi útil?

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 é.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top