Question

En utilisant ce code:

#include <fstream>

#include <boost/archive/text_oarchive.hpp>

using namespace std;

int main()
{
    std::ofstream ofs("c:\test");
    boost::archive::text_oarchive oa(ofs);
}

Je reçois une exception non gérée lors de l'exécution sur l'exécution de la ligne d'archive boost:

boost::exception_detail::clone_impl<boost::exception_detail::error_info_injector<boost::archive::archive_exception> >
Était-ce utile?

La solution

La ligne suivante est dans l'erreur:

 std::ofstream ofs("c:\test");

Le compilateur aurait cracher un avertissement (au moins) si votre fichier a été appelé jest; mais '\t' - être l'évasion pour l'insertion d'un onglet, votre erreur passe non interceptée. En bref, le fichier ne sera pas créé. Vous pouvez le tester avec:

if (ofs.good()) { ... }

Maintenant, étant donné que le fichier n'a pas été créé, vous ne disposez pas d'un itérateur valide pour transmettre à boost::archive::text_oarchive qui jette l'exception.

Essayez ceci:

std::ofstream ofs("c:\\test");
//                  --^ (note the extra backslash)
if (ofs.good()) {
    boost::archive::text_oarchive oa(ofs);
    // ...
}

Hope this helps!

PS: Une nit finale, je ne pouvais pas me empêcher de faire - si vous allez utiliser

using namespace std;

puis

ofstream ofs("c:\\test");

est assez bon. Bien sûr, ce n'est pas une erreur de se qualifier ofstream, mais ce ne serait pas le meilleur style de codage. Mais, vous savez utiliser using namespace est mauvais, non?

PPS : Merci - sharptooth de me rappeler que \t vous obtient un onglet!

Autres conseils

Vous devez prendre l'exception et examiner son exception_code pour voir ce que la cause racine est.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top