C++ 多态类的Boost XML存档编译错误
我正在尝试使用boost归档以XML格式保存文件 我在编译时得到这两个错误C++ 多态类的Boost XML存档编译错误,c++,serialization,boost,C++,Serialization,Boost,我正在尝试使用boost归档以XML格式保存文件 我在编译时得到这两个错误 错误C2664“int boost::mpl::assertion_failed(boost::mpl::assert::type)”:无法将参数1从“boost::mpl::failed***************boost::serialization::is_wrapper:::************”转换为“boost::mpl::assert::type” 错误C2789“第6行中的mpl\U断言”:必须
BOOST_CLASS_EXPORT_GUID(SumKeyframeXYZ, "SumKeyframeXYZ")
BOOST_CLASS_EXPORT_GUID(SumPosition_Channel, "SumPosition_Channel")
这是主要功能
#include "Container.h"
BOOST_CLASS_EXPORT_GUID(SumKeyframeXYZ, "SumKeyframeXYZ")
BOOST_CLASS_EXPORT_GUID(SumPosition_Channel, "SumPosition_Channel")
int main()
{
std::ofstream ofs("D:\\output.xml");
Container cont;
cont.AddPositionChannel();
boost::archive::xml_oarchive oa(ofs);
oa << BOOST_SERIALIZATION_NVP(cont);
return 0;
}
#包括“Container.h”
BOOST_CLASS_EXPORT_GUID(SumKeyframeXYZ,“SumKeyframeXYZ”)
BOOST_CLASS_EXPORT_GUID(SumPosition_通道,“SumPosition_通道”)
int main()
{
std::ofs流(“D:\\output.xml”);
集装箱运输;
cont.AddPositionChannel();
boost::archive::xml_oarchive oa(ofs);
oa posChannel=std::使_共享();
通道。推回(posChannel);
};
私人:
好友类boost::serialization::access;
模板无效序列化(存档和应收账款),
常量无符号整数版本)常量{
ar&BOOST_序列化_NVP(标准域名);
ar和BOOST_序列化_NVP(通道);
}
};
//////////////////////////////////////////////////////////
SumChannel.h
#include <fstream>
#include <iostream>
#include <boost/archive/xml_iarchive.hpp>
#include <boost/archive/xml_oarchive.hpp>
#include <boost/serialization/vector.hpp>
class SumChannel
{
public:
float offset;
SumChannel() { offset = 1.0; }
private:
friend class boost::serialization::access;
template<class Archive> void serialize(Archive & ar,
const unsigned int version) const {
ar & BOOST_SERIALIZATION_NVP(offset);
}
};
#包括
#包括
#包括
#包括
#包括
类SumChannel
{
公众:
浮动偏移量;
SumChannel(){offset=1.0;}
私人:
好友类boost::serialization::access;
模板无效序列化(存档和应收账款),
常量无符号整数版本)常量{
ar和BOOST_序列化_NVP(偏移);
}
};
苏木海峡
#include "SumKeyframeXYZ.h"
#include "SumChannel.h"
#include <vector>
#include <boost/archive/xml_iarchive.hpp>
#include <boost/archive/xml_oarchive.hpp>
#include <boost/serialization/vector.hpp>
class SumPosition_Channel : public SumChannel
{
public:
std::vector<SumKeyframeXYZ> keyframes;
void AddKeyframe() { SumKeyframeXYZ key; keyframes.push_back(key); }
private:
friend class boost::serialization::access;
typedef SumChannel _Super;
template<class Archive> void serialize(Archive & ar,
const unsigned int version) const {
ar & boost::serialization::base_object<_Super>(*this);
ar & BOOST_SERIALIZATION_NVP(keyframes);
}
};
#包括“SumKeyframeXYZ.h”
#包括“SumChannel.h”
#包括
#包括
#包括
#包括
类别SUMU频道:公共SUMU频道
{
公众:
std::向量关键帧;
void AddKeyframe(){SumKeyframeXYZ键;关键帧。向后推(键);}
私人:
好友类boost::serialization::access;
typedef SumChannel\u Super;
模板无效序列化(存档和应收账款),
常量无符号整数版本)常量{
ar&boost::serialization::base_对象(*this);
ar和BOOST_序列化_NVP(关键帧);
}
};
关键帧基
#include <iostream>
#include <fstream>
#include <boost/archive/xml_oarchive.hpp>
#include <boost/archive/xml_iarchive.hpp>
class Keyframebase
{
public:
std::string stdstrName;
float time;
Keyframebase() { stdstrName = "BaseKey"; time = 50.0; }
private:
friend class boost::serialization::access;
template<class Archive> void serialize(Archive & ar,
const unsigned int version) {
ar & BOOST_SERIALIZATION_NVP(stdstrName);
ar & BOOST_SERIALIZATION_NVP(time);
}
};
#包括
#包括
#包括
#包括
类关键帧基
{
公众:
std::字符串stdstrName;
浮动时间;
Keyframebase(){stdstrName=“BaseKey”;time=50.0;}
私人:
好友类boost::serialization::access;
模板无效序列化(存档和应收账款),
常量(无符号整数版本){
ar&BOOST_序列化_NVP(标准域名);
ar和BOOST_序列化_NVP(时间);
}
};
苏门答腊
#include "KeyframeBase.h"
#include <boost/archive/xml_iarchive.hpp>
#include <boost/archive/xml_oarchive.hpp>
#include <boost/serialization/vector.hpp>
class SumKeyframeXYZ : public Keyframebase
{
public:
float x;
float y;
float z;
SumKeyframeXYZ() { x = 150.0; y = 200.0; z = 300.0; }
private:
friend class boost::serialization::access;
template<class Archive> void serialize(Archive & ar,
const unsigned int version) const {
ar & boost::serialization::base_object<Keyframebase>(*this);
ar & BOOST_SERIALIZATION_NVP(x);
ar & BOOST_SERIALIZATION_NVP(y);
ar & BOOST_SERIALIZATION_NVP(z);
}
};
#包括“KeyframeBase.h”
#包括
#包括
#包括
类SumKeyframeXYZ:公共关键帧库
{
公众:
浮动x;
浮动y;
浮动z;
SumKeyframeXYZ(){x=150.0;y=200.0;z=300.0;}
私人:
好友类boost::serialization::access;
模板无效序列化(存档和应收账款),
常量无符号整数版本)常量{
ar&boost::serialization::base_对象(*this);
ar&BOOST_序列化_NVP(x);
ar&BOOST_序列化_NVP(y);
ar&BOOST_序列化_NVP(z);
}
};
代码的问题是我没有将NVP写入基类
我将基类归档代码从
ar & boost::serialization::base_object<_Super>(*this);
ar&boost::serialization::base_对象(*this);
对于所有的基类,都要这样做
typedef SumChannel _Super;
ar & boost::serialization::make_nvp("SumChannel", boost::serialization::base_object<_Super>(*this));
typedef SumChannel\u Super;
ar&boost::serialization::make_nvp(“SumChannel”,boost::serialization::base_对象(*this));
并从serilize函数中删除常量
#include "Container.h"
BOOST_CLASS_EXPORT_GUID(SumKeyframeXYZ, "SumKeyframeXYZ")
BOOST_CLASS_EXPORT_GUID(SumPosition_Channel, "SumPosition_Channel")
int main()
{
std::ofstream ofs("D:\\output.xml");
Container cont;
cont.AddPositionChannel();
boost::archive::xml_oarchive oa(ofs);
oa << BOOST_SERIALIZATION_NVP(cont);
return 0;
}