-2

文字列パラメーターを受け入れる関数があり、整数変数がある場合、それを文字列に変換してからその関数に渡す必要があります。このコードを使用しましたが、ostringstream は I/O 用であるため、機能しません。

ostringstream ostr;
while (.....)
{
regnum++;
ostr<<regnum;
grph.addlastname(ostr.str());
}

たとえば、関数に 5 ではなく 12345 を渡します。どうすればよいですか?

4

2 に答える 2

5

それは本当です-「これを行うための最良の方法は何ですか?」を解決する同様の質問がたくさんあります。しかし、「なぜこれが機能しないのか」という質問への回答には、OPについて学ぶべきことがあると思います。

したがって:

あなたstringstreamには内部状態があり、ループ中に常に新しい数字を追加します-しかし、前の数字はまだストリームにあります!これを修正するには、stringstreamスコープをループに対してローカルにします。つまり、ループの外側ではなくループの内側で宣言します。

std::to_stringただし、この特定の問題に対するより良い解決策です。)

于 2013-02-08T16:39:03.800 に答える
0

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 を宣言するのが最善の方法です)

于 2013-02-08T16:41:31.597 に答える