1

Visual C++ を使用して、ゲームを GNU/Linux から Windows に移植しています。

問題は次のとおりです。

std::stringstream sstm;

/// *working on stringstream*

const int size = sstm.str().size();
char buffer[size];

std::ofstream outfile("options", std::ofstream::binary);

for(int i = 0; i < size; i++)
    buffer[i] = sstm.str().at(i);

outfile.write(buffer, size);

outfile.close();

バッファの宣言では、「式には定数値が必要です」と書かれています。

私はこれを次のように変更しました:

std::vector<char>buffer(size);

そして、VC は、outfile.write() で「パラメーター 1 を 'std::vector<_Ty>' から 'const char *' に変換できません」と言います。

4

2 に答える 2

3
const int size = sstm.str().size();
char buffer[size];

bufferここでは可変長配列 (VLA) です。これは C++ 標準では違法なコードです。コンパイル時に配列のサイズを知る必要があります。VLA'a は C99 で許可されており、G++ では C++ の拡張機能として許可されています。

const intリテラルまたは ˙ で初期化されている場合、コンパイル時定数にすることができますconstexpr。あなたの場合、そうではありません。

あなたはほとんどそこにいます -vector<char>それを行うための適切な方法です。それを渡すにostream::write()buffer.data()、または&buffer[0]-

于 2013-02-24T09:18:55.923 に答える
0

sstm.str()呼び出しごとに新しい文字列が作成されることを知っていますか? バッファが大きい場合、それは多くの文字列になります。

文字列のコピーを 1 つだけ作成するだけで済みます。

std::stringstream sstm;

/// *working on stringstream*

std::string buffer = sstm.str();

std::ofstream outfile("options", std::ofstream::binary);

outfile.write(buffer.c_str(), buffer.size());

outfile.close();
于 2013-02-24T09:57:22.910 に答える