2

使用此代码:

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

2 回答 2

7

以下行有错误:

 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");

已经足够好了。当然,qualify 不是错误ofstream,但它不是最好的编码风格。但是,你知道使用using namespace是不好的,不是吗?

PPS:谢谢你——sharptooth提​​醒我\t给你一个标签!

于 2009-02-17T05:47:24.270 回答
2

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

于 2009-02-16T23:54:04.853 回答