s
タイプにヌル終了文字列が格納されていますchar*
。istringstream
からオブジェクトを作成したいs
。のコンストラクターはistringstream
type のパラメーターを想定しているため、 からにstring
変換する必要があります。これを行うには、次の方法でコンストラクターを使用して匿名オブジェクトを作成しました。s
char*
string
string
s
istringstream strin(string(s));
これは、gcc (4.7.3) を使用してコンパイルした場合は問題ないようです。ただし、使用する次のコードを追加した後strin
int r;
strin >> r;
コンパイルエラーが発生しました:
error: invalid operands of types 'std::istringstream(std::string*) {aka std::basic_istringstream<char>(std::basic_string<char>*)}' and 'int' to binary 'operator>>'
タイプが何であるかを理解していないので、これは奇妙に思えstd::istringstream(std::string*)
ます。strin
タイプであってはいけませんstd::istringstream
か?
次のコードの修正バージョンのいずれかを使用することで、コンパイラを満足させることができます。
解決策 1: 名前付きstring
オブジェクトを渡す
string str(s);
istringstream strin(str);
解決策 2: を直接渡すs
と、暗黙的に に変換されるようですstring
istringstream strin(s);
解決策 3: 明示的に変換s
するstring
istringstream strin((string)(s));
解決策 4: 一対の魔法のかっこを追加する
istringstream strin((string(s)));
解決策 5: コンパイラs
が実際にchar*
型であることを伝える
istringstream strin(string((char*)s));
元のものを除いて、これはすべて機能します。ここで実際に何が起こっているのか、誰か説明できますか? ありがとう。