2015-05-27 71 views
-1

這是一個用於存儲公式的.h文件,但它給了我在第16行(字符串下)的標題處看到的錯誤。我是一個初學者,錯誤說不是恆定的,所以我雖然把「const」放在「float」之前,但它不會以任何方式工作。錯誤:初始化程序元素不是常量(c語言)

#ifndef FORMULAS_H_INCLUDED 
#define FORMULAS_H_INCLUDED 

float a; 
float Pi=3.1415926536; 
float r; 
float b; 
float c; 
float h; 




char formula_volume_cube[100] = "Formula for the Volume of a Cube: V=a*a*a"; 
const float volume_cube=(a*a*a); 



#endif // FORMULAS_H_INCLUDED 

任何幫助將不勝感激。感謝您的時間。

+0

也許包括在你的帖子中出現錯誤,所以人們可以更輕鬆地幫助你。我對'c'不熟悉,但我想問題是'a * a * a'不是一個常量表達式。也許試着讓'a'成爲一個常量值。否則,你必須在'.c'文件中定義音量的內容。 – ShellFish

+0

「(a * a * a)」只是一個簡單的乘法問題,它不涉及問題。我知道這一點,因爲當我從.h文件中取出該部分並將其放入實際代碼(.c文件)中時,它完美運行 – AlucardVP22

+0

,但它更容易將所有公式放在一個.h文件中,因此我不必再次重寫所有內容 – AlucardVP22

回答

3

C中的全局變量只能用編譯時常量表達式進行初始化,這是一個非常狹窄的表達式類。它基本上只包括文字或文字涉及的表達式:

float a1 = 1.5;     // OK 
const float a2 = 2.5 * 10/300; // Also OK 

標識另一個全局變量是不是編譯時間常量表達式的表達式:

// float a3 = a2;     // Error! 

C是隻是沒有表現足夠的這一點。這都是爲了簡單起見。例如,C不區分const float b1 = 2.5;extern const float b2;。變量b1b2沒有「更多的常量」,但編譯器只知道b1的值,而b2的值不是已知的—它可以僅由不同的翻譯單元設置,並且沒有任何排序。所以沒有辦法使一個恆定的「更恆定」比另一個。 C中的簡單解決方案是 id-expression可用作編譯時常量。

(C++,相比之下,使全局變量具有動態初始化,這引入了一整套如果一個全局變量的初始化依賴於另一個全局變量訂貨的擔憂。C有沒有這些問題。)

+0

沒關係,但在我的情況下,我希望用戶輸入a的值,並乘以3的值,這就是爲什麼我把* a * a。仍然有效的原因,因爲它在實際中工作正常。c文件 – AlucardVP22

+0

@ AlucardVP22:與任何東西無關。您以後可以隨時*更改全局變量的值。我們*僅*在這裏談論初始值設定項。 –

+0

好的,謝謝你的時間 – AlucardVP22

0

消息

Error: Initializer Element is not constant

相當多說,這一切

float a; 

未聲明爲一個常數(它可以改變在程序運行時),所以

const float volume_cube=(a*a*a); 

不能是一個常數,因爲它基於非常數a

+0

雖然'a'被聲明爲'const'會有區別麼? –

+0

@Eric J.它沒有區別,如果我拿出「const」,我沒有在浮動之前的常量,它給了我同樣的錯誤 – AlucardVP22