2016-03-07 92 views
0

我有一個項目,我在其中使用人的目錄。在我的主課程中,我呼叫cout < < myDirectory < < endl;在此目錄中顯示整個人員列表。爲此,我在Directory Class和Person類中覆蓋了< <運算符。ostream不顯示探查C++

在我使用的具體原因一張地圖,這樣我顯示每個人這樣Directory類:

std::ostream& operator<<(std::ostream& os, const T& myDirectory) 
{ 
    typedef map<Person, Location>::const_iterator Iterator; 
    for(Iterator it=myDirectory.m_directory.begin();it!=myDirectory.m_directory.end;++it){ 
     os<<it->first<<endl; 
} 
return os; 

爲了做到這一點,我也該重載< <運營商在Person類方式:

ostream& operator<<(std::ostream& os, const Person& p){ 
    os << p.lastName << "," << p.firstName << endl; 
    return os; 
} 

我的問題是,它顯示不正確。逗號前面的名字和姓氏以及合併在一起的名字和種類。例如,如果我的名字是傑克丹尼,我會得到這樣的輸出:

,Jackls

如果我使用ENDL;在名字和名字後它運作良好。例如:

os << p.lastName << endl; 
os << "," << p.firstName << endl; 

我得到這樣的輸出:

丹尼爾斯
,傑克

任何想法,我做錯了什麼?

+0

我認爲你的問題是你如何閱讀和存儲信息 – NathanOliver

回答

2

在這裏猜測,因爲你沒有提供一個完整的例子來顯示問題,但我想你會在姓氏末尾有一個尾隨'返回'字符。

它輸出「丹尼爾斯」並移動光標回行的開頭,然後將覆蓋有「傑克」,所以輸出將是「 Jackls」

+0

你明白了!我正在從一個文件中讀取,最後每行添加了一行。沒有意識到,但我猜測它令人困惑。當創建我的變量時,我只需刪除最後一個字符,然後它就像魅力一樣。非常感謝 :) – FidelCasto

0

ENDL還清潔的緩衝區。也許你應該添加out.flush()而不是endl,它會工作嗎?只是猜測。