boost序列化的编译错误

Posted

技术标签:

【中文标题】boost序列化的编译错误【英文标题】:Compilation error with boost serialization 【发布时间】:2011-10-18 14:13:47 【问题描述】:

我创建了一个小样本来测试 boost 序列化库,但我遇到了编译问题。

首先,代码如下:

#include <iostream>
#include <fstream>
#include <iomanip>
#include <boost/filesystem/operations.hpp>
#include <boost/serialization/nvp.hpp>
#include <boost/filesystem/fstream.hpp>
#include <boost/archive/xml_iarchive.hpp>
#include <boost/archive/xml_oarchive.hpp>
#include <boost/archive/binary_oarchive.hpp>
#include <boost/archive/binary_iarchive.hpp>
#include <boost/serialization/utility.hpp>
#include <boost/serialization/list.hpp>
#include <boost/serialization/version.hpp>

std::vector<uint8_t> buf;

class MyClass

public:
    MyClass();
    virtual ~MyClass();

    int assetStatus;

    friend class boost::serialization::access;

    template<typename Archive> void serialize(
        Archive & ar,
        const unsigned int version)
    
        ar & BOOST_SERIALIZATION_NVP(assetStatus);
    

    std::string ToString()
    
        std::string toret;
        toret += " assetStatus: " + assetStatus;

        return toret;
    
;

int main()

    MyClass a, b;
    a.assetStatus = 10;

    std::cout << a.ToString();

    boost::archive::xml_oarchive ooxml(std::ofstream(dbPath));
    ooxml << BOOST_SERIALIZATION_NVP(a); // error here

    MyClass d;
    boost::archive::xml_iarchive iixml(std::ifstream(dbPath));
    iixml >> BOOST_SERIALIZATION_NVP(d); // error here
    std::cout << d.ToString();

我在以下行收到编译错误:

ooxml << BOOST_SERIALIZATION_NVP(a);

iixml >> BOOST_SERIALIZATION_NVP(d);

错误是:

'iixml &gt;&gt; boost::serialization::make_nvp(const char*, T&amp;) [with T=MyClass(((MyClass&amp;)(&amp;d)))]' 中与operator&gt;&gt; 不匹配

你对这句话的含义有什么想法吗?

【问题讨论】:

【参考方案1】:

看起来 dbPath 没有定义。此外,ooxml/iixml 的声明似乎不正确。

尝试修改您的代码以执行以下操作: ...

const char * dbPath = "file.xml"

std::ofstream ofs(dbPath);
boost::archive::xml_oarchive ooxml(ofs);
ooxml << BOOST_SERIALIZATION_NVP(a); 

std::ifstream ifs(dbPath);
boost::archive::xml_iarchive iixml(ofs);
iixml >> BOOST_SERIALIZATION_NVP(d); 

【讨论】:

是的,我在复制/粘贴时忘记了那部分,但它是在我的代码中定义的。关于另一部分,我已经这样改了,发现这是正确的解决方案,尽管我不明白哪个是不同的......【参考方案2】:

我认为不支持读取 NVP(名称值对)(即使用 iixml),请使用 &(而不是 >>)或 iixml >> d;

【讨论】:

以上是关于boost序列化的编译错误的主要内容,如果未能解决你的问题,请参考以下文章

使用 Metrowerks 编译器解决 boost.thread 编译错误

将 boost 用于 TR1 时,boost math 特殊函数编译错误

boost::promise::set_exception() 编译错误

Boost C++ 示例代码 - 静态编译错误

编译 boost c++ 代码错误

boost::integer_mask gcc 编译器错误