尽管结构已序列化,但升压错误“结构没有名为‘序列化’的成员”

问题描述 投票:0回答:1

下面是我设计的结构和类,最终目标是使用 boost 序列化将值写入 xml 当我编译下面的代码时,我收到编译时错误(错误很大,我刚刚粘贴了它的最后一行,这可能讨论了这个问题)

/boost_1_49_0/include/boost/serialization/access.hpp:118:错误:'类 std::map、std::allocator >、std::map、std::allocator >、std::map、std::分配器>、IdInfo、std::less、std::分配器>>、std::分配器、std::分配器>、IdInfo>>>、std::less、std::分配器>>、std::分配器、 std::allocator >、std::map、std::allocator >、IdInfo、std::less、std::allocator > >、std::allocator、std::allocator >、IdInfo> > > > > >、 std::less、std::allocator >>、std::allocator、std::allocator >、std::map、std::allocator >、std::map、std::allocator >、IdInfo、std::少,std::分配器>>,std::分配器,std::分配器>,IdInfo>>>,std::less,std::分配器>>,std::分配器,std::分配器>,std: :map, std::allocator >, IdInfo, std::less, std::allocator >>, std::allocator, std::allocator >, IdInfo> > > > > > > > >' 没有名为 ' 的成员连载' make: *** [READER.exe] 错误 1

下面的 AssetReaderInfo clkass 实际上有一个成员序列化,但错误与它相矛盾。

我已经在所有类中定义了序列化,但无法编译 另外,我还没有指定主要的 cpp 代码,因为我认为这会增加混乱

您能指出哪里出了问题吗?

struct IdInfo
{
    std::string m_milePost;
    std::string m_cellModemAlertExclusionList;

    public:
    IdInfo():m_milePost("milepost"),m_cellModemAlertExclusionList("dummyval"){};

    template<class archive>
    void serialize(archive& ar, const unsigned int version)
    {
        using boost::serialization::make_nvp;
         ar & make_nvp("values", m_milePost);
         ar & make_nvp("values", m_cellModemAlertExclusionList);
    }
};

class myReader {
 public:

    friend class boost::serialization::access;
   // Asset ID list
   typedef std::map< std::string,IdInfo > myMap;
   typedef std::map< std::string > mySet;
   struct ReaderInfo
   {
         mySet m_aSList;
         myMap m_pList;
         myMap m_eList;
         // WIU/BS type
         std::string m_Type;
         std::string m_topic;
         std::string m_lastSavedMsg;
         template <class archive>
         void serialize(archive& ar, const unsigned int version)
         {
           using boost::serialization::make_nvp;
            ar & make_nvp("values", m_topic);
            ar & make_nvp("values", m_Type);
            ar & make_nvp("values", m_eList);
            ar & make_nvp("values", m_pList);
         }

   };
    typedef std::map< std::string, ReaderInfo > GroupDataMap;
    GroupDataMap    m_GroupDataMap;

    template<class archive>
    void serialize(archive& ar, const unsigned int version)
    {
        using boost::serialization::make_nvp;
        ar & make_nvp("Group", m_GroupDataMap);
    } 
}

int main()
{
   myReader Reader;
   boost::archive::xml_oarchive xml(ofs);
   xml << boost::serialization::make_nvp("Connections", Reader);
}

解决方案:

事实证明我应该包含 /boost/serialization/map.hpp 作为 iam 使用 std::map

感谢您的帮助

boost boost-serialization
1个回答
9
投票

事实证明,我应该包含

/boost/serialization/map
.hpp,因为我正在使用
std::map

#include /boost/serialization/map.hpp

© www.soinside.com 2019 - 2024. All rights reserved.