2

C++ を使用して単純なターミナル ファンタジー ゲームを作成しています。「エラー: 可変サイズのオブジェクト 'items' が初期化されていない可能性があります」というエラーが発生したようです。コードは次のとおりです。

string useItem(int item)
{
    string items[item] = {"HP Potion","Attack Potion","Defense Potion","Revive","Paralize Cure"};
}

アイテムにアクセスして返すために、この関数を使用できるようにしたいと考えています。このエラーを修正するにはどうすればよいですか。Code::Blocks を mingw コンパイラで使用しています。

4

1 に答える 1

2

ここにはいくつかの問題があります。1 つの可変長配列は C99 の機能であり、ISO C++ の一部ではありませんが、いくつかのコンパイラはgcc を含む拡張機能としてこの機能をサポートしています。

第二に、C99 は、ドラフト C99 標準セクション6.7.8 Initializationから、可変長配列は初期化子を持つことができないと述べています。

初期化されるエンティティの型は、サイズが不明な配列または可変長配列型ではないオブジェクト型でなければなりません。

代替手段は次を使用することです:

string items[] = { ... } ;

サイズが不明な配列のサイズは、初期化子の要素数によって決定されます。

あるいは、可変サイズの配列を持つ慣用的な C++ の方法は、std::vectorを使用することです。

于 2014-12-07T03:11:03.377 に答える