【发布时间】:2017-07-24 05:38:18
【问题描述】:
我有一个核心数据结构,我正在将值加载到其中:它是一个向量的哈希图。但是,向量包含一个结构。此外,该结构使用模板类型。
我需要序列化这个数据结构并定期保存到磁盘。然后,稍后——在不同的程序中——我需要加载序列化的数据结构。
这是结构的简化版本。我对它们进行了最低限度的定义,但除了这个基本版本之外,还有其他数据项(成员)。
#include<vector>
#include<string>
#include<map>
#include<fstream>
#include<stdlib.h>
#include <boost/serialization/vector.hpp>
#include <boost/serialization/map.hpp>
#include <boost/archive/text_oarchive.hpp>
using namespace std;
template<typename T>
struct DataUnit{
size_t time;
string transaction_string;
T transaction;
}
template<typename T>
struct DataStructure{
map<string transaction_hash, vector<DataUnit<T>> > hashmap;
int max_transactions;
// I have a method to add stuff, but omitted for readability
}
我从第一个结构 DataUnit 开始,并对其进行了如下修改:
template<typename T>
struct DataUnit{
size_t time;
string transaction_string;
T transaction;
template<class Archive>
void serialize(Archive & ar, const unsigned int version){
ar & time;
ar & transaction;
ar & transaction_string;
}
};
最后,我需要序列化数据结构。但是,当我使用以下代码运行它时:
int main(){
DataUnit<int> hi;
hi.time = time(NULL);
hi.transaction = 1;
hi.transaction_string = "world";
return 0;
}
世界因 boost 的错误而崩溃。据我所知,我遵循了教程示例exactly。如何增强序列化这些对象?
一些错误(但有这么多我不敢相信这不是根本问题......):
在函数`boost::archive::text_oarchive::text_oarchive(std::ostream&, unsigned int)中
对`boost::archive::text_oarchive_impl::text_oarchive_impl(std::ostream&, unsigned int)'的未定义引用
最后一个错误:
对`boost::archive::archive_exception::~archive_exception()'的未定义引用
它从那里继续...但我看不出我缺少任何包含...(boost 是通过 Cygwin 安装的)...
(以管理员身份运行代码...我输出的文本文件存在,具有读写权限...ofs对象创建成功)...
目前,完全没有想法......(尝试链接 lboost_serialization,重新安装 boost)不知道我是否从代码中遗漏了什么 ^^^
【问题讨论】:
-
我认为您需要链接到 boosts 库之一。这看起来像链接器错误。
-
@KurtStutsman 谢谢你。我试过 -lboost_serialization;但我无法弄清楚还有什么可以尝试的。您知道我可以去哪里寻找可能的联系的清单/文档吗?
-
你用来构建的命令是什么?能否将整个命令行添加到问题中?
-
@KurtStutsman 是的,今天下午
-
@KurnStutsman 所以当我注释掉所有提升时,这编译一切正常;取消注释提升,一切都会中断:
g++ -std=c++11 -lboost_serialization main.cpp hashmap_transaction.h hashmap_transaction.cpp -o run.exe这是在 Cygwin 中;尝试-lboost-serialization以防万一,它找不到链接...
标签: c++ serialization boost