2009-08-19 111 views
1

如何使用operator>>std::istream讀取?如何從std :: istream(使用操作符>>)讀取?

我試過如下:

void foo(const std::istream& in) { 
    std::string tmp; 
    while(in >> tmp) { 
    std::cout << tmp; 
    } 
} 

但它給出了一個錯誤:

error: no match for 'operator>>' in 'in >> tmp' 
+0

的istream的不應該是一個開始常量。 istream對象的狀態將需要改變,因爲你將數據從數據中提取出來。 – 2009-08-19 22:39:53

回答

9

運算符>>修改流,所以不要通過const傳遞,只是引用。

+0

謝謝!令人驚訝的是,從流中讀取應該修改它,但大概是通過閱讀來提高位置指針。 – Frank 2009-08-19 22:43:04

+2

這應該不會令人驚訝。現在從流中讀取會改變您稍後將從同一個流中讀取的內容。這是一種可觀察的外部效應,因此應該考慮修改對象,而不管位置指針的內部實現細節如何。 – 2009-08-19 22:50:24

1

你這樣做的正確方法。你確定你包含了你需要的所有標題嗎? (<string><iostream>)?

+0

是的,包括。 – Frank 2009-08-19 22:36:54

+0

尤金是對的。我沒有注意到const引用。它抱怨這個特定錯誤的原因是因爲沒有操作符的版本>>需要一個const流。 – 2009-08-19 22:40:23

3

使用非const引用:

void foo(std::istream& in) { 
    std::string tmp; 
    while(in >> tmp) { 
    std::cout << tmp; 
    } 
}