質問

Windows 7でVisual C ++に切り替えると、Visual C ++が言うようにコードがコンパイルできなかったとき、GCCコンパイラを使用してLinuxでNetBeansのプログラムに取り組んでいました。 expected constant expression いくつかの行。 NetBeansでは、私は単に似たようなことをしました char name[fullName.size()];, 、VisualC ++を使用している間、私は特に試しましたが、

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

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

注:私は知っています この質問, 、しかし、ベクターを使用せずにこれを機能させる方法はありますか?

役に立ちましたか?

解決

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

したがって、この:

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

これになります:

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

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

他のヒント

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

ソリューションには以下が含まれます。

  • ヒープで作成します
  • 一定にします

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

C ++では、コンパイル時に配列のサイズを既知する必要があります。標準以外の拡張機能の使用を気にしない場合、GCCはあなたがしているようなコードを許可しています(標準のC ++ではないが、 C99のように、Cの標準)。

また、ベクトル(この特定の場所で)を使用することができると思いますが、アレイ用に書かれているコードは、再コンパイルのみでベクトルで動作できます。または、書き直しはまったくありません。

君の char name[fullName.size()]; の例です 可変長配列 私が知る限り - C ++で標準化されていないので、あなたはコンパイラーに慈悲にかかっています。 [わずかにオフトピックはC99標準の一部です

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top