Boostez exception lors de l'exécution
-
23-08-2019 - |
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> >
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.