不能出现在常量表达式中

时间:2011-05-08 19:31:57

标签: c++ constant-expression

在以下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];

我收到错误消息 double log(double)'不能出现在常量表达式中。 为什么我得到这个问题,因为我已经在前面放了一个整数?我该如何解决这个问题?

2 个答案:

答案 0 :(得分:4)

编译器引用的常量表达式实际上是数组tab的边界。静态分配的数组的维度必须在编译时知道,但row的值直到运行时才能确定,因为它是使用函数计算的。

答案 1 :(得分: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));