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];

我收到错误消息double log(double)' cannot appear in a constant-expression。既然我在前面放了一个整数,为什么会出现这个问题?我应该如何解决这个问题?

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 回答