C++ Stringstream允许函数中的getline调用

C++ Stringstream允许函数中的getline调用,c++,cin,stringstream,C++,Cin,Stringstream,我通过引用将从cin组装的stringstream传递给类函数。当我在class函数中调用streamstream.str()时,所有的输入都在那里。然而,在下一行中,当我调用getline(stringstream,output)时,它失败了,并且永远不会启动循环。我的stringstream怎么了 #include <iostream> #include <sstream> using namespace std; class HRMLMap{ publi

我通过引用将从cin组装的stringstream传递给类函数。当我在class函数中调用
streamstream.str()
时,所有的输入都在那里。然而,在下一行中,当我调用
getline(stringstream,output)
时,它失败了,并且永远不会启动循环。我的stringstream怎么了

#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;
}
#包括
#包括
使用名称空间std;
类HRMLMap{
公众:
HRMLMap(stringstream和iss){
弦线;

cout这里的问题在于您使用的打开
stringstream
的模式

stringstream ss("", ios_base::app | ios_base::out);
这意味着您将被附加到该流,并且该流处于输出模式。这意味着您只能对其进行写入,这意味着您无法从中读取

要修复它,您可以指定它也在输入模式下使用

stringstream ss("", ios_base::app | ios_base::out | ios_base::in);
或者你可以用

stringstream ss;

这给了您相同的行为。

您如何知道它不会启动循环?您的“失败”指示是什么?请显示演示问题的代码。另请参见。似乎您对其进行了太多简化,以至于严格来说,它不会显示您描述的行为将ss命名为
stringstream ss;
您尚未选择的<代码>在
中-默认值应该可以正常工作,因为Nathanoliver,该代码不起作用。我测试了它。我认为您将iss.str()的输出与getline()的输出混为一谈。它从未到达while循环中。@Ben Oops。我忘了您添加了换行符。