2017-09-29 102 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; 

它给你相同的行为。