当我尝试用C++中的谷类做序列化时,我遇到了一个奇怪的错误。

当我尝试用C++中的谷类做序列化时,我遇到了一个奇怪的错误。,c++,serialization,cmake,cereal,C++,Serialization,Cmake,Cereal,我一直在犯这个奇怪的错误 /usr/bin/ld: CMakeFiles/libdungeon.dir/src/main.cpp.o: in function `decltype (({parm#2}.serialize)({parm#1})) cereal::access::member_serialize<cereal::BinaryOutputArchive, Character>(cereal ::BinaryOutputArchive&, Character&

我一直在犯这个奇怪的错误

/usr/bin/ld: CMakeFiles/libdungeon.dir/src/main.cpp.o: in function `decltype (({parm#2}.serialize)({parm#1})) cereal::access::member_serialize<cereal::BinaryOutputArchive, Character>(cereal
::BinaryOutputArchive&, Character&)':
main.cpp:(.text._ZN6cereal6access16member_serializeINS_19BinaryOutputArchiveE9CharacterEEDTcldtfp0_9serializefp_EERT_RT0_[_ZN6cereal6access16member_serializeINS_19BinaryOutputArchiveE9Chara
cterEEDTcldtfp0_9serializefp_EERT_RT0_]+0x1f): undefined reference to `void Character::serialize<cereal::BinaryOutputArchive>(cereal::BinaryOutputArchive&)'
collect2: error: ld returned 1 exit status
make[2]: *** [CMakeFiles/libdungeon.dir/build.make:119: bin/libdungeon] Error 1
make[1]: *** [CMakeFiles/Makefile2:96: CMakeFiles/libdungeon.dir/all] Error 2
make: *** [Makefile:104: all] Error 2


有什么想法吗?当我使用类似于这里的示例文件时,使用类似的cmake文件,一切都很好

> P>不能将函数模板的声明和定义分隔为C++中的Health.h和Currime.CPP文件。要修复此问题,请将Character::serialize的函数模板定义移动到头文件:

//in character.hpp

...

template <class Archive>
void serialize(Archive & ar){ //function definition moved to header file
    ar (m_level);
}

...


<>这是C++中模板的一个很大的限制。有关为什么函数模板定义必须在头文件中的更详细解释,请参见此答案:

这很有效!非常感谢^@斯凯:没问题
//in character.hpp

...

template <class Archive>
void serialize(Archive & ar){ //function definition moved to header file
    ar (m_level);
}

...