我试图为指向std :: list的共享指针赋值,但是assign失败并给出错误,下面是我的代码供参考:
struct X
{
public:
X();
X(int a,int b, std::string ss)
{
y=a;
z=b;
aa=ss;
}
int y;
int z;
std::string aa;
typedef std::list<X> Xdata;
private:
friend class boost::serialization::access;
template<class Archive>
void serialize(Archive &at, const unsigned int version)
{
at & y;
at & z;
at & aa;
}
};
struct Q
{
public:
Q();
std::string q1;
boost::shared_ptr<X::Xdata> xx;
private:
friend class boost::serialization::access;
template<class Archive>
void serialize(Archive &at, const unsigned int version)
{
at & q1;
at & xx; // will this serialize ??
}
};
void function_assignvalue(Q *e)
{
e->q1 = "hello";
X datax;
datax.y=10;
datax.z=20;
datax.aa="x";
e->xx.reset(new X::Xdata()); // gives error
}
它会给出一些未解析的符号错误,还会xx序列化吗?
答案 0 :(得分:1)
为您的X
和Q
类提供默认构造函数(请参阅下面的代码):
struct X
{
public:
X() : a(0), b(0) {}
X(int a,int b, std::string ss) : y(a), z(b), aa(ss) {}
int y;
int z;
std::string aa;
typedef std::list<X> Xdata;
private:
friend class boost::serialization::access;
template<class Archive>
void serialize(Archive &at, const unsigned int version)
{
at & y;
at & z;
at & aa;
}
};
struct Q
{
public:
Q() {}
std::string q1;
boost::shared_ptr<X::Xdata> xx;
private:
friend class boost::serialization::access;
template<class Archive>
void serialize(Archive &at, const unsigned int version)
{
at & q1;
at & xx; // will this serialize ??
}
};
答案 1 :(得分:1)
#include <boost/serialization/shared_ptr.hpp>
#include <boost/serialization/list.hpp>
将序列化。
对于未解析的符号,您需要定义它们并链接定义它们的对象。另见FAQ条目: