提升c ++库对象序列化问题

时间:2011-02-11 23:37:31

标签: c++

错误是:

terminate called after throwing an instance of 'boost::archive::archive_exception
what(): input stream error
Aborted

我在main.c中有这些代码

Object *obj = new Object();
{
    std::ifstream ifs("FILEX");
    boost::archive::text_iarchive ia(ifs);
    ia >> *obj;
}

“FILEX”之前可能存在也可能不存在,这是错误的原因吗?或者是 因为我以错误的方式实现了Object类的serialize方法?

2 个答案:

答案 0 :(得分:1)

使用ifstream时我最喜欢的参考页面: http://www.cplusplus.com/reference/iostream/ifstream/

你试图打开“FILEX”两次 - 我认为这不是你想要做的。我不熟悉boost :: archive,但你至少可以检查ifs是否可用:

Object *obj = new Object();
{
    std::ifstream ifs("FILEX");
    if (ifs.good()) {
        boost::archive::text_iarchive ia(ifs);
        ia >> *obj;
    } else {
        // throw an error or something
        assert(false);
    }
}

答案 1 :(得分:0)

文件应该存在,只有在这种情况下,您可以从中反序列化某些内容。正如@Tim建议的那样,只需检查文件是否已成功打开。