我在使用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:负整数常量转换为无符号类型
我已经包含了所有必需的头文件,但仍然存在问题。
答案 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;
}