0

私のプログラムは g++ コンパイラでは問題なく動作しますが、CC コンパイラではエラーが発生します。

次の行:Shape s[atoi(argv[1])];エラーが発生します: error: 配列添字演算子内で整数定数式が必要です。

次に、次のように変更しようとしました:int i = atoi(argv[1]);に続いてShape s[i];、それでも同じエラーが発生します。

コマンドラインから作成するシェイプの数を取得するため、argv[1] が必要です。例 ./program 10Team s[10];

argv[] を CC コンパイラで動作させるにはどうすればよいですか?

4

3 に答える 3

2

チーム s[10];

スタック上に配列を作成しますが、これはサイズが定数式の場合にのみ可能です。動的配列が必要な場合は、への呼び出しで配列を動的に作成する必要がありますnew[]

int size = atoi( argv[1]);
Team* s = new Team[ size];

それがメモリ管理を容易にすることを優先std::vector<Team> tv(size);します (そして結局のところ、遅かれ早かれ、STL ライブラリを学ぶ必要があります。今日から始めましょう)。

于 2014-09-26T11:59:26.890 に答える
1

標準 C++ では、配列のサイズはコンパイル時の定数でなければなりません。GCC では、非標準の拡張機能として可変長配列を使用できます。他のコンパイラはそうではありません。

これを移植可能に行うには、動的に割り当てられた配列が必要です。

#include <memory>

std::vector<Shape> s(atoi(argv[1]));
于 2014-09-26T12:04:25.953 に答える
1

配列の場合、指定するサイズは定数でなければなりません。したがって、これを行うことができます:

Team s[10];

これを行うことはできません:

int size = 10;
Team s[size];

代わりに、これを行う必要があります。

int size = 10;
Team* s = new Team[size];
// do stuff
delete[] s;
于 2014-09-26T12:04:10.583 に答える