Назначение общего указателя, указывающего на тип 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:

Другие вопросы по тегам