我有一个核心数据结构,我正在将值加载到:它是向量的散列图。但是,向量包含结构。此外,struct使用模板类型。
我需要序列化这个数据结构并定期保存到磁盘。然后,稍后 - 在另一个程序中 - 我需要加载序列化数据结构。
这是结构的简化版本。我最低限度地定义它们,但除了这个裸骨版本之外,还有其他数据项(成员)。
#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;
}
世界因爆炸而出现错误。据我所知,我遵循了教程示例exactly。如何提升序列化这些对象?
一些错误(但有很多我不能相信它不是基本的......):
在函数`boost :: archive :: text_oarchive :: text_oarchive(std :: ostream&amp;,unsigned int)
未定义引用`boost :: archive :: text_oarchive_impl :: text_oarchive_impl(std :: ostream&amp;,unsigned int)&#39;
上次错误:
未定义的引用`boost :: archive :: archive_exception :: ~archive_exception()&#39;
它从那里继续......但是我不知道我缺少任何包含......(通过Cygwin安装了增强版)......
(以管理员身份运行代码...我输出的文本文件存在,具有读写权限...正在成功创建ofs对象... ...
目前,完全没有想法...... (尝试连接lboost_serialization,重新安装提升)不知道我是否遗漏了代码中的内容^^^
答案 0 :(得分:1)
问题是依赖于构建命令的顺序,例如。您需要在使用它们的模块之后列出依赖项。你也不编译.h文件。它们应该包含在使用它们的.cpp文件中。试试这个命令:
g++ -std=c++11 main.cpp hashmap_transaction.cpp -o run.exe -lboost_serialization