使用这段代码:
#include <fstream>
#include <boost/archive/text_oarchive.hpp>
using namespace std;
int main()
{
std::ofstream ofs("c:\test");
boost::archive::text_oarchive oa(ofs);
}
我在执行 boost 存档行时在运行时遇到未处理的异常:
boost::exception_detail::clone_impl<boost::exception_detail::error_info_injector<boost::archive::archive_exception> >
最佳答案
下面一行是错误的:
std::ofstream ofs("c:\test");
如果您的文件名为 jest
,编译器会(至少)发出警告;但是 '\t'
- 作为插入制表符的转义符,您的错误未被捕获。简而言之,不会创建该文件。您可以使用以下方法进行测试:
if (ofs.good()) { ... }
现在,由于文件未创建,您没有有效的迭代器传递给 boost::archive::text_oarchive
,这会引发异常。
试试这个:
std::ofstream ofs("c:\\test");
// --^ (note the extra backslash)
if (ofs.good()) {
boost::archive::text_oarchive oa(ofs);
// ...
}
希望这对您有所帮助!
PS:我无法阻止自己做的最后一件事——如果你要使用
using namespace std;
然后
ofstream ofs("c:\\test");
足够好了。当然,限定 ofstream
不是错误,但它不是最好的编码风格。但是,您知道使用 using namespace
是不好的,不是吗?
PPS:谢谢 -- sharptooth
提醒我 \t
给你一个标签!
关于c++ - 在运行时 boost 异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/555038/