Ciao人,
我很安静,不想找到问题的根源。我正在使用Boost:序列化(版本1.46.1),一切都与binary_oarchive
一起正常工作。我有一个类的层次结构,因此,我使用register_type()
。
但是,在我使用binary_iarchive
来反序列化我的对象时,我得到了
错误:无法分配抽象类型的对象
来自输入档案中register_type()
的调用。
在谷歌搜索后,我发现宏BOOST_SERIALIZATION_ASSUME_ABSTRACT(T)
必须用于抽象类。问题是它根本不起作用:)。
任何人都可以帮助我吗?
有关我的代码的更多信息:
virtual void AbstractClass::initBinarySerialization(binary_iarchive& ia)
{
ia.register_type<AbstractClass>();
}
virtual void SubClass::initBinarySerialization(binary_iarchive& ia)
{
AbstractClass::initBinarySerialization(ia);
ia.register_type<SubClass>();
}
我在阅读档案之前先致电initBinarySerialization
。
答案 0 :(得分:1)
错误:无法分配抽象类型的对象
似乎代码中的某个地方,您正在创建抽象类的实例。这就是您收到此错误的原因,因为禁止创建 abstract 类的实例。您只能创建具体类的实例。
你需要通过写:
来告诉提升X是一个抽象类BOOST_SERIALIZATION_ASSUME_ABSTRACT(X);
现在请按照此主题进一步解释: