【问题标题】:Port project VS2003 -> VS2013 error C2039 serialize is not a member of hash_Map端口项目VS2003 -> VS2013错误C2039 serialize is not a member of hash_Map
【发布时间】:2015-01-14 23:36:00
【问题描述】:

尝试将我公司的一些软件从 Visual Studio 2003 更新到 2013。我们使用了许多必须从不同位置移植的库,但在完成所有增强复制并将其添加到 C++ 之后,还包括目录,我仍然收到以下错误。

error C2039" 'serialize' : is not a member of 'stdext::hash_map Key,Data,Hash_Traits,std::allocator>'

此错误发生在 boost/serialization 中的 access.hpp 中。

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

谢谢

【问题讨论】:

    标签: c++ boost visual-studio-2013 visual-studio-2003


    【解决方案1】:

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

    我假设你升级到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);
            }
    } }
    

    【讨论】:

      猜你喜欢
      • 2014-07-17
      • 1970-01-01
      • 1970-01-01
      • 2011-03-08
      • 2012-12-10
      • 1970-01-01
      • 2018-03-15
      • 2018-05-02
      • 2020-09-18
      相关资源
      最近更新 更多