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 >> boost::serialization::make_nvp(const char*, T&) [with T=MyClass(((MyClass&)(&d)))]'
中与operator>>
不匹配
你对这句话的含义有什么想法吗?
【问题讨论】:
【参考方案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 特殊函数编译错误