C++ Visual Studio 2012错误C2039:&x27;序列化';:不是';标准::共享\u ptr<_Ty>';
我在编译静态类库时遇到了这个问题 我知道Boost并没有正式支持VS2012,但由于这是我当前的开发环境,我真的需要一些建议 我一直在四处寻找,但到目前为止没有任何帮助 示例代码: Foo.h:C++ Visual Studio 2012错误C2039:&x27;序列化';:不是';标准::共享\u ptr<_Ty>';,c++,boost,visual-studio-2012,shared-ptr,C++,Boost,Visual Studio 2012,Shared Ptr,我在编译静态类库时遇到了这个问题 我知道Boost并没有正式支持VS2012,但由于这是我当前的开发环境,我真的需要一些建议 我一直在四处寻找,但到目前为止没有任何帮助 示例代码: Foo.h: #include "FooImpl.h" #include <boost/serialization/serialization.hpp> #include <boost/serialization/shared_ptr.hpp> #include <boost/archi
#include "FooImpl.h"
#include <boost/serialization/serialization.hpp>
#include <boost/serialization/shared_ptr.hpp>
#include <boost/archive/text_iarchive.hpp>
#include <boost/archive/text_oarchive.hpp>
class Foo
{
public:
Foo(void) : pImpl(std::make_shared<FooImpl>()) {}
//similar constructors follow
//a few get methods here
private:
std::shared_ptr<FooImpl> pImpl;
friend class boost::serialization::access;
template <typename Archive>
void serialize(Archive & ar, const unsigned int file_version);
}
#包括“FooImpl.h”
#包括
#包括
#包括
#包括
福班
{
公众:
Foo(void):pImpl(std::make_shared()){
//类似的构造器紧随其后
//这里有一些获取方法
私人:
std::共享的ptr pImpl;
好友类boost::serialization::access;
模板
无效序列化(存档&ar,常量未签名整数文件\u版本);
}
Foo.cpp:
#include "stdafx.h"
#include "Foo.h"
template<class Archive>
void Foo::serialize(Archive& ar, const unsigned int ver)
{
ar & pImpl;
}
template void Foo::serialize<boost::archive::text_iarchive>(
boost::archive::text_iarchive & ar,
const unsigned int file_version
);
template void Foo::serialize<boost::archive::text_oarchive>(
boost::archive::text_oarchive & ar,
const unsigned int file_version
);
#包括“stdafx.h”
#包括“Foo.h”
模板
void Foo::序列化(存档&ar,常量unsigned int-ver)
{
ar&pImpl;
}
模板void Foo::序列化(
boost::archive::text\u iarchive&ar,
常量无符号整数文件\u版本
);
模板void Foo::序列化(
boost::archive::text\u oarchive&ar,
常量无符号整数文件\u版本
);
FooImpl.h:
#include <boost/serialization/serialization.hpp>
#include <boost/serialization/string.hpp>
class FooImpl
{
public:
FooImpl(void);
//other constructors, get methods
private:
//data members - unsigned int & std::wstring
friend class boost::serialization::access;
template <typename Archive>
void serialize(Archive& ar, const unsigned int ver);
};
#包括
#包括
类FooImpl
{
公众:
FooImpl(无效);
//其他构造函数,获取方法
私人:
//数据成员-无符号int&std::wstring
好友类boost::serialization::access;
模板
无效序列化(存档&ar,常量未签名整数版本);
};
FooImpl.cpp:
#include "stdafx.h"
#include "FooImpl.h"
//function implementations
template <typename Archive>
void FooImpl::serialize(Archive& ar, const unsigned int ver)
{
ar & id_;
ar & code_;
}
//Later added, serialization requires these
template void FooImpl::serialize<boost::archive::text_iarchive>(
boost::archive::text_iarchive & ar,
const unsigned int file_version
);
template void FooImpl::serialize<boost::archive::text_oarchive>(
boost::archive::text_oarchive & ar,
const unsigned int file_version
);
#包括“stdafx.h”
#包括“FooImpl.h”
//函数实现
模板
void FooImpl::serialize(存档&ar,常量unsigned int-ver)
{
应收账款和应收账款;
应收账款和代码;
}
//后来添加的序列化要求
模板void FooImpl::序列化(
boost::archive::text\u iarchive&ar,
常量无符号整数文件\u版本
);
模板void FooImpl::序列化(
boost::archive::text\u oarchive&ar,
常量无符号整数文件\u版本
);
boost::serialization
是一个可扩展的,可以扩展到任何类型,因此您可以为std::shared_ptr
实现自己版本的load/save
,查看boost_安装路径/boost/serialization/shared_ptr.hpp
,并从中实现自己的load/save
。作为另一种解决方法,您可以使用boost::shared_ptr
代替std::shared_ptr
!!由于您使用的是boost
,我认为使用std::shared_ptr
比boost::shared_ptr
没有任何优势,您正在尝试序列化指针。您希望序列化指针指向的对象。最简单的方法是将foo替换为哪行代码会出现错误?此外,不应ar&pImpl代码>bear&(*pImpl)代码>?(pImpl是一个指针。)@David Schwartz它现在可以编译了,但似乎这不是解决方案。每当我尝试序列化一个在我的main方法中保存foo的共享\u ptr时,我都会在那里得到相同的错误。你说的“相同的错误”是什么意思?您描述的错误是一个编译器错误,您说它现在可以编译了。我在另一个项目中使用了静态库,它在尝试序列化共享指针时不会编译。您可以粘贴未编译的代码吗?boost序列化库的全部目的不就是智能地序列化指针吗?否则,boost/serialization/shared_ptr.hpp
有什么意义?