Назначение общего указателя, указывающего на тип std::list, не работает
Я пытаюсь присвоить значение общему указателю, указывающему на std::list, как, но назначить не удается и выдает ошибку, и ниже мой код для справки:
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
}
это дает ошибку некоторые неразрешенные символы, а также будет сериализировать хх?
2 ответа
Предоставьте конструктор по умолчанию для вашего 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 ??
}
};
#include <boost/serialization/shared_ptr.hpp>
#include <boost/serialization/list.hpp>
Будет ли это сериализовать.
Что касается неразрешенных символов, вам нужно определить их и связать объекты, которые их определяют. Смотрите также раздел FAQ:
- Что такое неопределенная ссылка / неразрешенная внешняя ошибка символа и как ее исправить? внешний символ ошибка и-как-делать-я-фикс