2017-09-29 99 views
1

我通過引用傳遞了一個從cin彙編到類函數的stringstream。當我在類函數中調用streamstream.str()時,所有的輸入都在那裏。但是,在下一行中,當我撥打getline(stringstream,output)時,它失敗並且從不啓動循環。我的stringstream有什麼問題?Stringstream允許在函數中調用getline函數

#include <iostream> 
#include <sstream> 

using namespace std; 

class HRMLMap{ 
    public: 
     HRMLMap(stringstream& iss){ 
      string line; 
      cout << iss.str() << endl; 
      while(getline(iss,line)){ 
       cout << "it never gets here." << "\n"; 
      } 
     } 

}; 




int main() { 
    std::string line; 
    stringstream ss("", ios_base::app | ios_base::out); 
    for(int i = 0; i < 4; ++i){ 
     getline(cin,line); 
     ss << line << endl; 
    } 
    HRMLMap myHRMLMap(ss); 

    return 0; 
} 
+1

你怎麼知道它不啓動循環?你的「失敗」指示是什麼? –

+0

請顯示演示問題的代碼。另見[mcve]。看起來像你簡化它太多,所以嚴格來說,它並沒有顯示你描述的行爲 – user463035818

+2

聲明SS爲'stringstream ss;'你沒有選擇'in' - 默認應該足夠好 –

回答

2

這裏的問題與您打開stringstream的模式有關。您使用的是

stringstream ss("", ios_base::app | ios_base::out); 

這意味着您將會追加到流並且流處於輸出模式。這意味着你只能寫信給它,這意味着你不能從中讀取它。

要解決它,你可以指定它也工作在輸入方式

stringstream ss("", ios_base::app | ios_base::out | ios_base::in); 

,或者你可以只使用

stringstream ss; 

它給你相同的行爲。