在运行时提升异常

时间:2009-02-16 23:35:41

标签: c++ boost runtime-error

使用此代码:

#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> >

2 个答案:

答案 0 :(得分:6)

以下行有误:

 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为您提供标签!

答案 1 :(得分:2)

您需要捕获异常,然后检查其exception_code以查看根本原因。