Stringstream允许在函数中调用getline

时间:2017-09-29 15:43:58

标签: c++ cin stringstream

我通过引用传递了一个我从cin汇编到类函数的字符串流。当我在类函数中调用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;
}

1 个答案:

答案 0 :(得分:2)

此处的问题是您使用stringstream打开的模式。你用过

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

这意味着您将添加到流中,并且流处于输出模式。这意味着你只能写信给它,这意味着你无法从中读取它。

要修复它,您可以指定它也可以使用

在输入模式下操作
stringstream ss("", ios_base::app | ios_base::out | ios_base::in);

或者您可以使用

stringstream ss;

给你相同的行为。