не может появляться в константе-выражении - PullRequest
4 голосов
/ 08 мая 2011

В следующей программе на языке 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 ]

4 голосов
/ 09 мая 2011

Константное выражение, на которое ссылается компилятор, на самом деле является границами массива tab. Размеры статически размещенных массивов должны быть известны во время компиляции, но значение row не может быть определено до времени выполнения, поскольку оно оценивается с помощью функции.

3 голосов
/ 08 мая 2011

Вам, кто отрицает мой ответ. Скажите, что этот код не работает:

#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));
...