【发布时间】:2018-01-06 18:23:24
【问题描述】:
我不知道为什么我在尝试编译时收到此错误。我尝试添加几乎所有类型。我正在尝试序列化一组 RegDoneEntry 的。我知道序列化的调用不在这里,但我不能超越这一点。以下内容已更新以反映建议。
我现在得到的错误是
严重性代码描述项目文件行抑制状态 错误 LNK2001 无法解析的外部符号 “公共:静态类 std::set,类 std::allocator > RegDoneList::mylist” (?mylist@RegDoneList@@2V?$set@VRegDoneEntry@@U?$less@VRegDoneEntry@@@std@@V?$allocator@VRegDoneEntry@@@3@@std@@A) CerealTest CerealTest.obj 1
#include "stdafx.h"
#include "cereal/archives/binary.hpp"
#include "cereal/types/set.hpp"
#include <sstream>
#include <iostream>
#include <fstream>
#include <string>
#include <set>
#include <stdio.h>
#include "test.h"
RegDoneList myRegDoneList;
int main()
{
myRegDoneList = RegDoneList();
myRegDoneList.mylist = std::set<RegDoneEntry>();
std::ofstream ss("c:\\reg.bin", std::ofstream::binary |
std::ofstream::out | std::ofstream::trunc);
cereal::BinaryOutputArchive oarchive(ss);
oarchive(myRegDoneList); // Write the data to the archive
}
bool operator<(const RegDoneEntry& lhs, const RegDoneEntry& rhs)
{
return lhs.rawData < rhs.rawData;
}
还有头文件:
#include "stdafx.h"
#include "cereal/archives/binary.hpp"
#include "cereal/types/memory.hpp"
#include <sstream>
#include <iostream>
#include <fstream>
#include <string>
#include <set>
#include <stdio.h>
class RegDoneEntry
{
public:
std::string rawData;
int operation;
template<class Archive>
void serialize(Archive & archive)
{
// serialize things by passing them to the archive
archive(rawData, operation);
}
friend bool operator< (const RegDoneEntry &left, const RegDoneEntry &right);
};
class RegDoneList
{
public:
static std::set<RegDoneEntry> mylist;
template<class Archive>
void serialize(Archive & archive)
{
// serialize things by passing them to the archive
archive(mylist);
}
};
【问题讨论】:
-
您遇到什么错误?另外,`template
void serialize(Archive & archive)` 成员有什么用? -
错误是“谷物找不到任何输出序列化函数”。模板是谷物所需要的。
-
我遇到了同样的错误。原来 serialize 在我的类中被定义为私有方法,而不是公共方法。跟随教程:rubentorresbonet.wordpress.com/2014/08/25/…