簡體   English   中英

C ++操作符<<重載不打印出向量

[英]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 staffNamevector<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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM