私のクラスのベクトルvector<Data> data;
を印刷するのに問題があります。C++演算子<<オーバーロード中にベクトルが出力されない
簡単に言うと、私はクラスclass Data_proc
に取り組んでいる、それは公共の下のコンストラクタを持っています
explicit Data_proc(const string& n, istream& is)
{
Data temp;
while(is >> temp)
this->data.push_back(temp);
}
私も印刷用operator<<
をオーバーロードしています
friend ostream& operator<<(ostream& os, const Data_proc& dp)
{
os << "Person: " << dp.name
<< "\nnumber: " << dp.number;
copy(dp.data.begin(), dp.data.end(), ostream_iterator<Data>(cout));
return os;
}
ここでの問題は、そのコードです問題なくコンパイルできますが、データベクタからは何もコンソールに出力されません。しかし、私は部分的に、それは動作しますが、以下のように私のコンストラクタを変更する場合:
Data temp;
is >> temp;
data.push_back(temp);
しかし、あなたが疑われている可能性があるとして、これが唯一の最初の「ペア」をプリントアウトして、ファイルから読み出されたデータの残りがあります捨てる。私は何を間違えたのですか?
while
-loopがファイルから読み続けるのはなぜですか?どんな助けもありがとう!に関する詳細が必要な場合は、お知らせください。
編集:私はstring staffName
とvector<int> passCode
を持っているデータについてoperator>>
:
friend istream& operator>>(istream& is, Data& d)
{
getline(is, d.staffName, '\n');
int temp;
while(is >> temp)
d.passCode.push_back(temp);
return is;
}
私はそれも必要だ場合は、入力ファイルの内容がどのように見えるかのスニペットを貼り付けることができます!
編集2:ためoperator<<
を追加しました:
friend ostream& operator<<(ostream& os, const Data& d)
{
os << d.staffName<< "\n";
copy(d.passCode.begin(), d.passCode.end(), ostream_iterator<int>(cout, " "));
return os;
}
編集3:メイド新しいoperator>>
:で
getline(is, d.staffName, '\n');
string results;
getline(is, results, '\n');
istringstream iss(results);
int val;
while(iss >> val)
d.passCode.push_back(val);
return is;
ここで、 'データ'に対して '演算子>>'はありますか? [mcve]を投稿してください。 – PaulMcKenzie
@PaulMcKenzie私は 'operator >>'を追加しました。長いコードを申し訳ありません。 – user3941584
@MikelF 'main()'で 'operator >>'が使われた方法を意味しますか? – user3941584