Error: Initializer Element is not constant (c language)

Error: Initializer Element is not constant (c language)

这是一个用于存储公式的 .h 文件,但它给了我您在第 16 行(字符串下方)的标题处看到的错误。我是初学者,错误说不是常量,所以我虽然想把 "const" 放在 "float" 之前,但不管怎样都行不通。

#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

如有任何帮助,我们将不胜感激。感谢您的宝贵时间。

留言

Error: Initializer Element is not constant

几乎可以说明一切

float a;

没有声明为常量(它可以随着程序运行而改变),所以

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

不能是常数,因为它基于非常数 a

C 中的全局变量只能用编译时常量表达式 初始化,这是一种非常狭窄的class 表达式。它基本上只包含文字或涉及文字的表达式:

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;。变量 b1 不是 "more const" 而不是 b2,但编译器只知道 b1 的值,而 b2 的值是未知的 —它可能仅由不同的翻译单元设置,并且没有任何排序。所以没有办法让一个常量 "more constant" 比另一个常量。 C 中的简单解决方案是 no id-expression 可以用作编译时常量。

(相比之下,C++ 允许全局变量具有动态初始化器。如果一个全局变量的初始化器依赖于另一个全局变量,这将引入一整套排序问题。C 有 none 这些问题。)