私はブーストシリアル化ライブラリを試しています。唯一の問題は、別の.hと.cppファイルを持つオブジェクトをシリアル化しようとするときです。私は、このコマンドを使用してコンパイルする場合:別々の.hファイルと.cppファイルを使用したブーストシリアル化
g++ boostSerialize.cpp Class.cpp -lboost_serialization
を私はこのエラーを取得:
/tmp/cc8kbW6J.o: In function `void boost::serialization::access::serialize<boost::archive::text_oarchive, Class>(boost::archive::text_oarchive&, Class&, unsigned int)':
boostSerialize.cpp:(.text._ZN5boost13serialization6access9serializeINS_7archive13text_oarchiveE5ClassEEvRT_RT0_j[void boost::serialization::access::serialize<boost::archive::text_oarchive, Class>(boost::archive::text_oarchive&, Class&, unsigned int)]+0x25): undefined reference to `void Class::serialize<boost::archive::text_oarchive>(boost::archive::text_oarchive&, unsigned int)'
は、これが私の.hにあるものである:
#ifndef CLASS_H
#define CLASS_H
#include <iostream>
#include <string>
#include <boost/serialization/access.hpp>
using namespace std;
class Class{
friend class boost::serialization::access;
int a,b,c;
string stringy;
template<class Archive>
void serialize(Archive &ar, const unsigned int);
public:
Class(int ab, int bb, int cb);
};
#endif
と私の.cpp:
#include <iostream>
#include "Class.h"
using namespace std;
Class::Class(int ab, int bb, int cb){
a = ab;
b = bb;
c = cb;
stringy = "Text";
}
template<class Archive>
void Class::serialize(Archive &ar, const unsigned int){
ar & a & b & c & stringy;
}
代わりにすべてを入れてみました.cppとそれを含めてうまくいきました。だから、それは.hインクルードと関係があることを知っています。なんらかの理由で、シリアライズ機能が見つからないのですか?私はちょうど両方の代わりに.cppを使うことができると思うが、私は組織が本当に好きで、これを大きなプロジェクトに使いたいと思う。 アイデア前もって感謝します。
http://www.parashift.com/c++-faq-lite/templates.html#faq-35.15 –