2013-02-15 39 views
2

我必須分配一個靜態變量,我從一個函數中獲取一個值。 我試着做了以下,但我得到的初始化元素不是恆定的。初始化元素不是一個常量

int countValue() 
{ 
return 5; 
} 

void MatrixZero() 
{ 

static int count=countValue(); 
count++; 
printf("count value %d \n",count); 

} 


int main() 
{ 
    MatrixZero(); 
    return 0; 

} 
+0

嘗試使用C++編譯器。請務必添加「#包括」。 C不允許用非常量初始化靜態變量。 – 2013-02-15 20:06:08

+0

@RichardPennington這是C和C++是不同的語言。我不認爲用C++編譯器編譯C程序是一個好建議。 – ouah 2013-02-15 20:07:22

+0

@ouah它在首次發佈時未被標記爲C.我只是指出了C和C++處理靜態初始化器的方式上的差異。 – 2013-02-15 20:10:21

回答

10

因爲......嗯......你的靜態變量的初始值不是一個常量。它必須是一個不變的表達。試試這個:

static int count = SOME_VALUE_OUT_OF_RANGE; 
if (count == SOME_VALUE_OUT_OF_RANGE) { 
    count = countValue(); 
} 

檢查它是否已經被初始化。

6

static存儲說明符聲明的變量必須用常量表達式進行初始化。

static int count=countValue(); 

函數調用不是一個常量表達式。

-1
// wenn countValue ein Objekt zurückgibt 

static int* count=0; if(count==0)count=countValue(); 
+0

請詳細說明此代碼如何回答問題。 – JAL 2016-03-25 20:17:54