4

次のC++プログラムでは:

static const int row = (dynamic_cast<int>(log(BHR_LEN*G_PHT_COUNT)/log(2)));
static const int pht_bits = ((32*1024)/(G_PHT_COUNT * G_PHT_COUNT * BHR_LEN));
unsigned char tab[pht_bits][1<<row];

「doublelog(double)」というエラーメッセージが定数式に表示されません。整数キャストを前に置いたのに、なぜこの問題が発生するのですか?これをどのように修正すればよいですか?

4

2 に答える 2

4

コンパイラが参照している定数式は、実際には配列の境界ですtab。静的に割り当てられた配列の次元はコンパイル時に知る必要がありますがrow、関数を使用して評価されるため、の値は実行時まで決定できません。

于 2011-05-08T21:51:01.577 に答える
3

私の答えに反対しているあなたに。このコードは機能しないことを教えてください:

#include <stdio.h>

double log(double foo)
{
  return 1.0;
}

static const int row = static_cast<int>(log(4)/log(2));

int main(void)
{
  printf("%d\n", row);
  return 0;
}

オリジナル((int)からstatic_castに変更されましたが、重要ではありません)

static const int row = static_cast<int>(log(BHR_LEN*G_PHT_COUNT)/log(2));
于 2011-05-08T19:34:46.603 に答える