C++ Visual Studio 2012错误C2039:&x27;序列化';:不是';标准::共享\u ptr<_Ty>';

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

我在编译静态类库时遇到了这个问题

我知道Boost并没有正式支持VS2012,但由于这是我当前的开发环境,我真的需要一些建议

我一直在四处寻找,但到目前为止没有任何帮助

示例代码:

Foo.h:

#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&pImplbe
ar&(*pImpl)?(pImpl是一个指针。)@David Schwartz它现在可以编译了,但似乎这不是解决方案。每当我尝试序列化一个在我的main方法中保存foo的共享\u ptr时,我都会在那里得到相同的错误。你说的“相同的错误”是什么意思?您描述的错误是一个编译器错误,您说它现在可以编译了。我在另一个项目中使用了静态库,它在尝试序列化共享指针时不会编译。您可以粘贴未编译的代码吗?boost序列化库的全部目的不就是智能地序列化指针吗?否则,
boost/serialization/shared_ptr.hpp
有什么意义?