私はかなり最近、C++クラスのfriendキーワードとシリアル化での使用法を学びましたが、今は動作させるためにいくつかの助けが必要です。C++クラスのシリアル化
私のクラスをファイルにシリアライズするのに問題はありませんが、うまくいっていますが、このファイルをベクターコンテナに読み込もうとしています。私は、行ごとに読み込むコードではループが必要だと確信していますが、クラスには異なる型があるので、私はstd :: getline()を使うことはできません。また、そのアプローチはistreamメソッドを使用しません実装された? サンプル出力ファイルは次のようになります。
Person 1
2009
1
Person 2
2001
0
マイコード:
class SalesPeople {
friend ostream &operator<<(ostream &stream, SalesPeople salesppl);
friend istream &operator>>(istream &stream, SalesPeople &salesppl);
private:
string fullname;
int employeeID;
int startYear;
bool status;
};
ostream &operator<<(ostream &stream, SalesPeople salesppl)
{
stream << salesppl.fullname << endl;
stream << salesppl.startYear << endl;
stream << salesppl.status << endl;
stream << endl;
return stream;
}
istream &operator>>(istream &stream, SalesPeople &salesppl)
{
stream >> salesppl.fullname;
stream >> salesppl.startYear;
stream >> salesppl.status;
// not sure how to read that empty extra line here ?
return stream;
}
// need some help here trying to read the file into a vector<SalesPeople>
SalesPeople employee;
vector<SalesPeople> employees;
ifstream read("employees.dat", ios::in);
if (!read) {
cerr << "Unable to open input file.\n";
return 1;
}
// i am pretty sure i need a loop here and should go line by line
// to read all the records, however the class has different
// types and im not sure how to use the istream method here.
read >> employee;
employees.push_back(employee);
ちなみに、私はしかし、私はどのようにシリアライズを習得しようとしている、Boostライブラリは、偉大なシリアライゼーションクラスを持っていることを知っています今のところSTLライブラリを使用して動作します。 私に与えることができ、正しい軌道に乗るための助けがあれば、事前に多くのことをありがとう!
ありがとうございました!!!! これは多くの助けになりました!今私は間違っていることをはるかに良く理解しています。 また、私はwsについて考えていなかった、私は長い間それを行う方法が不思議でした!どうもありがとうございます! – nmuntz
問題はありません。うれしいです! – Venesectrix