我在 C++11 中遇到谷物问题(http://uscilab.github.io/cereal/)。
我有一个共享库,我想使用谷类库序列化它的一个类。这是库“我想序列化对象类”的一部分代码:
“对象.hpp”
class ObjectPrivate;
class Object
{
public:
...
template <class Archive>
void load(Archive& archive);
template <class Archive>
void save(Archive& archive) const;
protected:
std::unique_ptr<ObjectPrivate> d_ptr;
};
template<>
void Object::load<cereal::BinaryInputArchive>(cereal::BinaryInputArchive& archive);
template<>
void Object::save<cereal::BinaryOutputArchive>(cereal::BinaryOutputArchive& archive) const;
“对象.cpp”
#include"Object_p.hpp"
template <class Archive>
void Object::load(Archive& archive)
{
archive(d_ptr);
}
template <class Archive>
void Object::save(Archive& archive) const
{
archive(d_ptr);
}
“对象_p.hpp”
#include"Object.hpp"
class ObjectPrivate
{
public:
int m_id;
template<class Archive>
void serialize(Archive & ar)
{
ar(m_id);
}
};
但我得到一个错误:
error: undefined reference to void GraphicalObject::save<cereal::BinaryOutputArchive>(cereal::BinaryOutputArchive&) const
error: undefined reference to void GraphicalObject::load<cereal::BinaryInputArchive>(cereal::BinaryInputArchive&)