c++Boost序列化,编译派生类时出错
c++ Boost serialize, error when compiling derived class
我在编译这段代码时遇到了一个非常奇怪的错误:
#ifndef packetint_h
#define packetint_h
#include "../packet.h"
class packetInt: public packet{
public:
packetInt(int pLength);
~packetInt();
double distance(packet* destPacket);
friend class boost::serialization::access;
template<typename Archive> void save(Archive& ar, const unsigned version) {
ar << boost::serialization::base_object<const packet>( *this);
for(int i = 0; i<getLength(); i++)
ar << ((int*)data)[i];
}
template<typename Archive> void load(Archive& ar, const unsigned version) {
std::cout<<"test"<<std::endl;
ar >> boost::serialization::base_object<packet>(* this);
data = new int[getLength()];
for(int i = 0; i<getLength(); i++)
ar >> ((int*)data)[i];
}
BOOST_SERIALIZATION_SPLIT_MEMBER()
};
class packetIntGenome: public packetGenome{
public:
packetIntGenome(int pLength);
~packetIntGenome();
};
#endif
编译时
C:UsersgrieverProgettiDaanatrunkdependenciesboostboost/serialization/access.hpp(93): error C2662: 'void packetInt::save<Archive>(Archive &,const unsigned int)': impossibile convertire il puntatore 'this' da 'const packetInt' a 'packetInt &'
1> with
1> [
1> Archive=boost::archive::text_oarchive
1> ]
1> La conversione comporta la perdita dei qualificatori
我不知道为什么,但删除
BOOST_SERIALIZATION_SPLIT_MEMBER()
修复编译错误(但代码不起作用)
对不起,我的英语不好,我是意大利人
编辑:
爬得更深我发现了问题,仍然没有解决办法btw
BOOST_SERIALIZATION_SPLIT_MEMBER()
template<typename Archive>
void serialize(Archive &ar,const unsigned int file_version){
boost::serialization::split_member(ar, *this, file_version); <--- this is not working
}
基于注释。要解决此问题,必须将save
方法声明为常量。
template<typename Archive> void save(Archive& ar, const unsigned version) const {
// ...
}
因此,在save
方法内部使用的所有方法也应该是常数。
相关文章:
- 为什么使用 "this" 指针调用派生成员函数?
- 具有奇怪重复模板模式的派生类中的成员变量已损坏
- 访问者访问变体并返回不同类型时出错
- 在Linux for Windows上编译C++代码时出错
- 读取文件的最后一行并输入到链接列表时出错
- 重载操作程序时出错>>用于类中的字符串 memebr
- 按基类对象访问派生类资源时出错
- 快速傅立叶变换:使用模板化派生类'undefined reference'即使标头和.cpp文件匹配也会出错
- 我设计了一个类并创建了基指针,但是当我尝试通过基指针访问派生函数时,它会出错
- 尝试定义派生自抽象类的类类型的对象时出错
- 尝试在基类之外创建派生类的实例时出错
- 派生类在访问基类的私有变量时出错
- C++ 当我将父方法作为派生对象调用时出错
- 创建派生类构造函数时出错
- main() 中从派生类C++调用函数时出错
- 实现派生类构造函数时出错:"重载函数的任何实例都与指定的类型匹配
- 从基类指针访问派生类函数时出错
- 解析公用派生基类模板中的函数模板名称时出错"Not declared in this scope"
- 抽象类在创建派生类的对象时出错
- c++Boost序列化,编译派生类时出错