在以下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)'不能出现在常量表达式中。 为什么我得到这个问题,因为我已经在前面放了一个整数?我该如何解决这个问题?
答案 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));