试图将我公司的一些软件从visual studio 2003更新到2013.我们使用了很多必须从不同位置移植的库,但在处理了所有的boost复制并将其添加到C ++之后目录,我仍然得到以下错误。
错误C2039“'serialize':不是'stdext :: hash_map Key,Data,Hash_Traits,std :: allocator>'
的成员
在boost / serialization中的access.hpp中发生此错误。
由于知识产权问题,我实际上无法包含任何代码,但我们将非常感谢任何帮助。
由于
答案 0 :(得分:0)
您应该通过实现自定义点使您的容器类可序列化。
我假设你升级到std::unordered_map
(因为你应该),然后你可以按照我在这里写的代码:C++ Boost.Serialization error for hash_map with custom objects as key
注意我为
std::unordered_map
定义了序列化,因此您不再需要使用已弃用的GNU / MSVC库扩展。 (另请参阅此 bug-report/patch )
#include <unordered_map>
#include <boost/serialization/collections_save_imp.hpp>
#include <boost/serialization/collections_load_imp.hpp>
#include <boost/serialization/utility.hpp>
#include <boost/serialization/split_free.hpp>
namespace boost { namespace serialization {
template<class Archive, typename... TArgs >
inline void save(Archive & ar, std::unordered_map<TArgs...> const&t, unsigned) {
boost::serialization::stl::save_collection<Archive, std::unordered_map<TArgs...> >(ar, t);
}
template<class Archive, typename... TArgs >
inline void load(Archive & ar, std::unordered_map<TArgs...> &t, unsigned) {
boost::serialization::stl::load_collection<Archive,
std::unordered_map<TArgs...>,
boost::serialization::stl::archive_input_map<
Archive, std::unordered_map<TArgs...> >,
boost::serialization::stl::no_reserve_imp<std::unordered_map<TArgs...> >
>(ar, t);
}
// split non-intrusive serialization function member into separate
// non intrusive save/load member functions
template <class Archive, typename... TArgs>
inline void serialize(Archive & ar, std::unordered_map<TArgs...> &t, unsigned file_version) {
boost::serialization::split_free(ar, t, file_version);
}
} }