2017-09-29 13 views
1

私はcinからクラス関数に組み立てたstringstreamを参照渡ししています。私がstreamstream.str()をクラス関数で呼び出すと、すべての入力がそこにあります。しかし、次の行でgetline(stringstream,output)と呼ぶと、失敗し、ループを開始しません。私のストリングストリームに何が問題なのですか?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

'stringstream ss;'を選択していません。デフォルトで十分です。 –

答えて

2

ここで問題は、stringstreamを開いたモードです。あなたは使用しました

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

これはあなたがストリームにアペンドされ、ストリームが出力モードにあることを意味します。つまり、あなたはそれに書き込むことができます。つまり、そこから読むことはできません。

は、あなたが、それはまた

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

で入力モードで動作を指定することができ、それを修正するために、またはあなたがあなたに同じ動作を提供します

stringstream ss; 

を使用することができます。

関連する問題