boost :: shared_ptr <type>不会序列化数据并提供错误</type>

时间:2014-03-26 11:13:32

标签: c++ visual-studio-2012 serialization boost

我在使用boost序列化共享指针时遇到了问题,下面是代码:

// Content.hpp文件

#include <boost/serialization/string.hpp>
#include <boost\serialization\shared_ptr.hpp>
#include <boost/serialization/list.hpp>


struct Content
    {

        std::string type;
    boost::shared_ptr<Content> mycontent;  // mycontent is of type Content


    private:
        friend class boost::serialization::access;
        template<class Archive>
        void serialize(Archive &ar, const unsigned int version)
        {
            ar & id;
            ar & name;
        ar & mycontent;
        }   

    public:
        Content(void);
        Content(const parameter_strings & parms);

        ~Content(void);
    };

// Content.cpp文件

Content::Content(void)
{
}

Content::~Content(void)
{
}

Content::Content(const parameter_strings & parms)
{
   // implementation part
}

如果我评论第&#34; - boost :: shared_ptr mycontent; - &#34;它编译没有错误,但我需要使用shared_ptr,因此它给出错误:

它给出错误:错误C4308:负整数常量转换为无符号类型

我已经包含了所有必需的头文件,但仍然存在问题。

1 个答案:

答案 0 :(得分:1)

我已经在这里回答了in the comments

  

@ user3382670为您的类启用析构函数虚拟RTTI。这意味着typeid(变量)将返回具有指针和引用的静态已知类型的正确运行时类型(大多数派生类)insetad。 - 3月22日凌晨1点01分

另外,既然你不需要多态,那么首先应该没有这样的问题:看到它 Live On Coliru

#include <boost/archive/text_oarchive.hpp>
#include <boost/serialization/string.hpp>
#include <boost/serialization/shared_ptr.hpp>

struct Content
{
    std::string id, name;
    boost::shared_ptr<Content> mycontent;

  private:
    friend class boost::serialization::access;
    template<class Archive>
        void serialize(Archive &ar, const unsigned int /*version*/)
        {
            ar & id;
            ar & name;
            ar & mycontent;
        }   

  public:
    Content() {}
    typedef int parameter_strings;
    Content(const parameter_strings & parms) { }

    ~Content() {}
};

int main()
{
    boost::archive::text_oarchive ao(std::cout);

    Content x;
    ao << x;
}