私は論文を整理するコードを見ています。私は閉じ込めとポインタを介して相互に接続された2つのクラス(著者と論文)を持っています。私は両方のクラスのシリアル化を定義しましたが、他のクラスに関する情報を破棄すればオブジェクトを保存できます。私は完全にオブジェクトシリアライゼーションに新しいですし、私は私が行くことができる限り私が行っていると感じています。オブジェクトへのポインタベクトルを使ったブースト(C++ - linux)
Author.h:
...
#include <fstream>
#include <boost/archive/text_oarchive.hpp>
#include <boost/archive/text_iarchive.hpp>
class Paper;
class Author
{
public:
friend class Paper;
Author(const std::string& last_name_in = "",
const std::string& first_name_in = "",
const std::string& middle_name_in = "");
...
private:
friend class boost::serialization::access;
template<class Archive>
void serialize(Archive & ar, const unsigned int version)
{
ar & first_name;
ar & last_name;
ar & middle_name;
ar & display_name;
for (int ii = 0; ii < list_of_papers.size(); ii++)
ar & list_of_papers[ii];
}
...
std::string first_name;
std::string last_name;
std::string middle_name;
std::string display_name;
std::vector<const Paper*> list_of_papers;
};
それは意味がないように私は、Paper.hでデフォルトコンストラクタを持っていないと私は本当に私はそれで行く方法がわかりません。 Paper.h:
...
class Author;
class Paper
{
public:
friend class Author;
Paper(const std::string& paper_title_in,
const std::vector<Author*>& paper_authors_in);
...
private:
friend class boost::serialization::access;
template<class Archive>
void serialize(Archive & ar, const unsigned int version)
{
ar & paper_title;
for (int ii = 0; ii < paper_authors.size(); ii++)
ar & paper_authors[ii];
}
std::string paper_title;
std::vector<Author*> paper_authors;
};
TEST.CPP:Linuxの
int main()
{
std::ofstream ofs("filename");
{
Author author1("Doe", "John");
Author author2("Dude", "Jim", "J");
std::vector<Author*> list_of_authors;
list_of_authors.push_back(&author1);
Paper other_paper("A Nice Paper", list_of_authors);
list_of_authors.push_back(&author2);
Paper this_is_my_paper("What a beautiful paper", list_of_authors);
boost::archive::text_oarchive oa(ofs);
oa << author1;
}
{
Author author_new;
std::ifstream ifs("filename");
boost::archive::text_iarchive ia(ifs);
ia >> author_new;
}
return 0;
}
、Iは、G ++でコンパイル:
上記の形態、コードでg++ -o test -I /path/boost/ -L /path/boost/ -lboost_serialization test.cpp author.cpp paper.cpp
コンパイルせず、私に巨大なメッセージを与えます。オブジェクトのシリアライゼーションを追加する前にコンパイルされ、 'ar & list_of_papers [ii];を削除するとコンパイルされます。 Author.hから。
誰かが私が逃しているものを見ることができますか?
私はあなたのブーストLIBS – Arunmu
への完全なパスを提供していないと思うあなたはエラーを投稿できますメッセージ – Lars