具有可序列化嵌套类的类的序列化奇怪的编译错误
Serialization of Class that has serializable nested classes in it strange compilation error
我正在尝试学习一些boost序列化的基础知识。所以我按照教程创建了简单的class A
和class B
和class C
,其中有A a_;
和B b_;
作为私人成员。
#include <boost/serialization/serialization.hpp>
#include <boost/archive/text_oarchive.hpp>
#include <boost/archive/text_iarchive.hpp>
#include <string>
#include <fstream>
class A{
private:
friend class boost::serialization::access;
template<class Archive>
void serialize(Archive & ar, const unsigned int version)
{
ar & a_;
}
int a_;
public:
A(){ std::cout << "A constructed" << std::endl; }
A(int a): a_(a) { std::cout << "A constructed with 'a' ==" << a << std::endl; }
};
class B{
private:
template<class Archive>
void serialize(Archive & ar, const unsigned int version)
{
ar & b_;
}
std::string b_;
public:
B(){ std::cout << "B constructed" << std::endl; }
B(std::string b): b_(b) { std::cout << "B constructed with 'b' ==" << b << std::endl; }
};
class C{
private:
template<class Archive>
void serialize(Archive & ar, const unsigned int version)
{
ar & a_;
ar & b_;
ar & d_;
}
A a_;
B b_;
double d_;
public:
C(){ std::cout << "C constructed" << std::endl; }
C(int a, std::string b, double d ): a_(a), b_(b), d_(d) { std::cout << "C constructed with 'd' == " << d << std::endl; }
};
int main() {
// create and open a character archive for output
std::ofstream ofs("filename");
// create class instance
C c(15, "rock and roll", 25.8);
// save data to archive
{
boost::archive::text_oarchive oa(ofs);
// write class instance to archive
oa << c;
// archive and stream closed when destructors are called
}
C c_recreated;
{
// create and open an archive for input
std::ifstream ifs("filename");
boost::archive::text_iarchive ia(ifs);
// read class state from archive
ia >> c_recreated;
// archive and stream closed when destructors are called
}
std::cin.get();
}
在IDEone live中,这里有所有奇怪和可怕的编译器错误。而在我的VS2010上,我只有2个相同的错误:
Error 2 error C2248: 'C::serialize' : cannot access private member declared in class 'C'
Error 3 error C2248: 'C::serialize' : cannot access private member declared in class 'C'
我做错了什么,我怎么能使class C
序列化后,class A
和class B
?
你没有friend class boost::serialization::access;
为B
和C
。
相关文章:
- 如何在C++中序列化结构数据
- 序列化,没有库的整数,得到奇怪的结果
- 如何知道QDataStream不能反序列化某些内容
- 如何使用Python从C++中读取谷物序列化数据
- 如何使用boost::具有嵌套结构和最小代码更改的序列化
- 带有Protobuf序列化的C++Hazelcast:字符串不是UTF-8格式的
- 自定义对象的dlib序列化在gcc中失败
- 在C++中序列化浮点数/双精度,编译为 WebAssembly
- 提升 XML 序列化在编译期间失败
- 如何设计可序列化类以使任何非序列化属性都会导致编译时错误
- Sig 11在使用-icpc v12使用-static和-openmp编译时使用boost序列化
- 对具有不可复制值的 stl 容器使用提升序列化时出现编译错误
- 使用boost::序列化与库链接时需要大量编译时间
- Boost mpl::list变量序列化check_const_loading()编译错误
- Boost序列化编译错误
- 具有可序列化嵌套类的类的序列化奇怪的编译错误
- boost序列化的编译错误
- void*指针类型的Boost序列化无法编译
- c++Boost序列化,编译派生类时出错
- 在Boost序列化中,boost_shared指针不会编译.给错误