文字列パラメーターを受け入れる関数があり、整数変数がある場合、それを文字列に変換してからその関数に渡す必要があります。このコードを使用しましたが、ostringstream は I/O 用であるため、機能しません。
ostringstream ostr;
while (.....)
{
regnum++;
ostr<<regnum;
grph.addlastname(ostr.str());
}
たとえば、関数に 5 ではなく 12345 を渡します。どうすればよいですか?
それは本当です-「これを行うための最良の方法は何ですか?」を解決する同様の質問がたくさんあります。しかし、「なぜこれが機能しないのか」という質問への回答には、OPについて学ぶべきことがあると思います。
したがって:
あなたstringstream
には内部状態があり、ループ中に常に新しい数字を追加します-しかし、前の数字はまだストリームにあります!これを修正するには、stringstream
スコープをループに対してローカルにします。つまり、ループの外側ではなくループの内側で宣言します。
(std::to_string
ただし、この特定の問題に対するより良い解決策です。)
1つのことを除いて、すべて問題ありません。次を参照してください。
ostringstream ostr;
while (.....)
{
regnum++;
ostr<<regnum;
grph.addlastname(ostr.str());
}
while の外で ostr を宣言すると、最初に while が実行され、ostr に「1」が追加されます。2 回目は、同じ「ostringstream」変数であるため、「2」が追加されるため、文字列は「12」になります。 ' 今...
解決策: while 内で ostringstream ostr を宣言し、std::to_string を使用するか、while が終了するたびに ostr.clear() を実行します。(while 内で ostr を宣言するのが最善の方法です)