2011-05-08 61 views
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]; 

我得到的錯誤消息雙對數(雙)」不能出現在一個常數表達式。 爲什麼我得到這個問題,因爲我已經把一個整數投在前面?我應該如何解決這個問題?

回答

3

對你來說,這是我的答案downvoting。告訴我,這個代碼不工作:

#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; 
} 

原始

static const int row = static_cast<int>(log(BHR_LEN*G_PHT_COUNT)/log(2)); 
+1

不應該在C++中使用C風格轉換。這也不能解決問題。 – 2011-05-08 19:41:53

+0

這個「答案」不回答爲什麼會出現錯誤的問題。 Alex的答案正確地表明**行的邏輯**常量值不是**常量表達式**,因此不能用作數組的大小。錯誤可能會報告在錯誤的行上,但此「​​答案」不提供解決方案。 – 2015-03-18 17:27:05

4

的常數表達式(從(INT)到static_cast,這不是問題改變)編譯器是指實際上是數組的邊界tab。靜態分配數組的維數必須在編譯時知道,但是row的值只有在運行時才能確定,因爲它是使用函數來計算的。

+0

已經爲實際回答問題Upvoted這個答案。 – 2015-03-18 17:27:34