我希望将哈希映射序列化为文件,并在以后对其进行反序列化。
#include <boost/serialization/hash_map.hpp>
#include <boost/filesystem/fstream.hpp>
#include <hash_map>
class A: virtual public B {
public:
friend class boost::serialization::access;
stdext::hash_map<std::string, myClass> myClassHashTable;
template <class Archive>
void serialize(Archive &ar, const unsigned int version)
{
ar & myClassHashTable;
}
};
void A::serializedToDisk()
{
boost::filesystem::path finalPath(SOME_CONSTANT);
// code to create boost::filesystem::ifstream ofs object
boost::archive::text_oarchive oa(ofs);
oa << myClassHashTable;
}
void A::restoreFromDisk()
{
boost::filesystem::path finalPath(SOME_CONSTANT);
// code to create boost::filesystem::ifstream ifs object
boost::archive::text_iarchive ia(ifs);
ia >> myClassHashTable;
}
但是我收到错误 -
错误C2039:'serialize':不是'stdext :: hash_map&lt; _Kty,_Ty&gt;'
的成员
我在网上搜索了这个错误但没有得到太多帮助。另外,我检查了我的加速安装serialization/hash_map.hpp
中是否有serialize()
函数。相同的代码适用于std::deque
的序列化。任何人都可以告诉我应该如何更改它以使其编译?
答案 0 :(得分:4)
首先,在代码顶部插入 #define BOOST_HAS_HASH
。
这会将您的编译错误更改为:
“错误C2039:'resize':不是'stdext :: hash_map&lt; _Kty,_Ty&gt;'”的成员。 :d
接下来,如果您评论您的恢复功能,您将看到您的代码正常工作并输出! &LT;好&gt;
但问题在于编译器之间的不兼容性。
遗憾的是, hash_map
的实施在“MSVS”和“GCC”中有所不同,resize
就是这种差异的一个例子。
接下来要解决这个新问题,
只是#include boost/serialization/map.hpp
和s.resize(bucket_count);
中的hash_collections_load_imp.hpp
评论(错误的地方)