編集:class TF
の定義:ファイルとstd :: coutに書き込むために異なる演算子<<()オーバーロードを使用できますか?
class TF {
std::vector<V4f> waypoints;
std::vector<int> densityWaypoints;
public:
std::size_t size() const { return waypoints.size(); }
friend std::ostream& operator<<(std::ostream& str, const TF& tf);
friend std::fstream& operator<<(std::fstream& str, const TF& tf);
// methods here
};
質問は、それはおそらく前提ですので、私は、ストリームを理解していないという事実からの蒸気があります。
operator<<(std::ostream, T)
をオーバーロードすると、画面にデータ構造を表示するために呼び出されたときに1つのオーバーロードが使用され、データ構造がファイルに書き込まれたときに別のものが使用されるようになりますか?
std::ostream& operator<<(std::ostream& str, const TF& tf) {
for (std::size_t i = 0; i != tf.waypoints.size(); ++i) {
str << " { "
<< tf.densityWaypoints[i] << " : "
<< tf.waypoints[i][3] << " : "
<< tf.waypoints[i][0] << " , "
<< tf.waypoints[i][1] << " , "
<< tf.waypoints[i][2]
<< " } ";
}
str << "\n";
return str;
}
std::fstream& operator<<(std::fstream& str, const TF& tf) {
str << (int)tf.size();
for (std::size_t i = 0; i != tf.waypoints.size(); ++i) {
str << tf.densityWaypoints[i]
<< tf.waypoints[i][0]
<< tf.waypoints[i][1]
<< tf.waypoints[i][2]
<< tf.waypoints[i][3];
}
これは奇妙なエラー(私は疲れてもよい)でコンパイルされません:私は2番目operator<<()
オーバーロードを追加するとき
error: no match for ‘operator<<’ (operand types are ‘std::fstream {aka std::basic_fstream}’ and ‘int’)
エラーが発生します。おそらく、このような何か最初のものはうまく動作します。 std::ofstream
とstd::fstream
の両方を同じ結果にしようとしました。
しかし、どちらかがうまくいくかどうかはわかりません。確かにint writeTF(std:fstream& str, const TF&tf)
のような関数を定義することは可能ですが、私にはC++には向いていません。ここにも表示される奇妙なエラーはもちろんです。
もちろん可能です。 –
エラーが発生した例を教えてください。今すぐ私たちに提示したコードは、さまざまな理由でコンパイルされません。 – 0x499602D2
@ 0x499602D2はクラス定義のショートカットを投稿しました – iksemyonov