[英]c++ operator<< overloading not printing out vector
我在打印自己類的vector<Data> data;
遇到麻煩vector<Data> data;
。
簡而言之,我正在研究class Data_proc
,它在public下有一個構造函數:
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不能繼續讀取文件? 任何幫助表示贊賞! 如果您需要有關class Data
詳細信息,請告訴我!
編輯: operator>>
的數據,其中我有string staffName
和vector<int> passCode
:
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:為class Data
添加了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;
在您的operator>>
while(is >> temp)
d.passCode.push_back(temp);
這將從流中讀取整數,直到失敗。 因此,無論是運行到流的末尾,還是直到嘗試讀取無法解釋為int的內容為止,都可以保證函數結束時流處於失敗狀態。 這意味着在您的構造函數中,無論文件內容如何,表達式is >> temp
都將報告為失敗,並且不會在向量中放置任何項目。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.