端口项目 VS2003 -> VS2013 错误 C2039 序列化不是hash_Map的成员

Port project VS2003 -> VS2013 error C2039 serialize is not a member of hash_Map

本文关键字:序列化 hash 成员 Map C2039 错误 VS2003 项目 VS2013 gt      更新时间:2023-10-16

尝试将我公司的一些软件从Visual Studio 2003更新到2013。我们使用了很多必须从不同位置移植的库,但是在处理了所有提升复制并将其添加到其他包含目录中C++之后,我仍然收到以下错误。

错误 C2039" '序列化' : 不是 'stdext::hash_map 键、数据、Hash_Traits、std::分配器>"的成员

此错误发生在 access.hpp 的提升/序列化中。

由于知识产权问题,我实际上不能包含我的任何代码,但任何帮助将不胜感激。

谢谢

应通过实现自定义点使容器类可序列化。

我假设您升级到std::unordered_map(因为您应该),然后您可以按照我在这里编写的代码进行操作: C++ 使用自定义对象作为键的hash_map的 Boost.Serialization 错误

注意 我为 std::unordered_map 定义了序列化,因此您不再需要使用已弃用的 GNU/MSVC 库扩展。(另请参阅此错误报告/补丁

#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);
        }
} }