错误是:
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方法?
答案 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建议的那样,只需检查文件是否已成功打开。