0

gcc コンパイラを使用して Linux 上の Netbeans でプログラムに取り組んでいましたが、Windows 7 で Visual C++ に切り替えたときに、Visual C++ がexpected constant expression数行で述べているようにコードがコンパイルに失敗しました。Netbeans では、単純に に似たことchar name[fullName.size()];を行いましたが、Visual C++ では、とりわけ次のことを試しました。

const int position = fullName.size();
char Name[position];

配列に使用する定数を作成するにはどうすればよいですか?

注:この質問については知っていますが、プログラムの多くの部分を書き直す必要があるため、ベクトルを使用せずにこれを機能させる方法はありますか?

4

4 に答える 4

2

これは VC++ では不可能です。私は知っています、かなり悲しいです:(

ソリューションには次のものがあります。

  • ヒープ上に作成する
  • 一定にする

新しい C++ 標準 (C++0x) は、これに対処するための「定数式」機能を提案しています。詳細については、こちらをご覧ください。

于 2010-03-19T21:43:05.233 に答える
1

C++ では、コンパイル時に配列のサイズがわかっている必要があります。非標準の拡張機能を使用することを気にしない場合、gcc はあなたが行っているようなコードを許可します (標準の C++ でありませんが、C99 の時点で C では標準であることに注意してください)。

また、ベクトルを (この特定の場所で) 使用しても問題はないと思いますが、配列用に記述されたかなりの量のコードは、再コンパイルするだけでベクトルを使用できます。またはまったく書き換えません。

于 2010-03-19T21:46:16.483 に答える
1

VC++ では、スタック配列サイズのランタイム宣言を行うことはできませんが、_allocaを介してスタック割り当てを行うことができます

したがって、この:

const int position = fullName.size();
char Name[position];

これになります:

const int position = fullName.size();
char * Name = (char*)_alloca(position * sizeof(char));

まったく同じというわけではありませんが、VC++ で得られるものと同じくらい近いものです。

于 2010-03-19T21:46:33.380 に答える
0

あなたchar name[fullName.size()];可変長配列の例であり、私が知る限り、C ++で標準化されていないため、コンパイラーに翻弄されます。[少し話題から外れていますが、C99標準の一部です]

于 2010-03-19T22:58:01.963 に答える