error C2099: initializer is not a constant

vs2010的老问题,首先出现错误:

error LNK2001: unresolved external symbol __iob

然后在网上搜索了答案:

我在main里面添加了如下代码:

 

#ifdef __cplusplus                                      
extern "C"                                         
#endif                                                     
 FILE _iob[3] = {__iob_func()[0], __iob_func()[1], __iob_func()[2]};

 

结果出现了新的问题:

报错的语句是:FILE _iob[3] = {__iob_func()[0], __iob_func()[1], __iob_func()[2]};

提示:error C2099: initializer is not a constant

 

怎么办啊,,,请大神指教

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 错误:初始化元素不是常量。 这个错误通常出现在C语言中,表示在初始化一个全局变量或静态变量时,使用了一个不是常量的表达式。在C语言中,全局变量和静态变量必须在编译时就确定其初始值,而不能在运行时再确定。 解决方法是将初始化表达式改为常量表达式,或者将变量定义为局部变量,这样可以在运行时确定其初始值。 ### 回答2: “initializer element is not constant”是一种编译错误,这种错误通常在编译器遇到不能被预先计算的变量时出现,例如定义一个非常量的变量作为数组的初始值或静态存储的初始值。 详细来讲,对于C语言或C++,该错误通常出现在变量初始化的时候,例如: ```c++ int size = 10; int arr1[size]; // 错误:initializer element is not constant const int size2 = 10; int arr2[size2]; // 正确:size2是一个常量,编译器可以预先计算 ``` 在第一个例子中,变量`size`是一个非常量,其值只能在运行时确定,而不是编译时确定。因此,编译器无法在编译时预先计算数组的大小,从而导致错误。在第二个例子中,变量`size2`是一个常量,因此编译器可以在编译时预先计算数组的大小,因此没有错误。 类似地,在定义静态变量时,也会出现该错误。静态变量必须在编译时就具有初始值,例如: ```c++ static int value1 = 10; // 正确 static int value2 = size; // 错误:initializer element is not constant ``` 在第一个例子中,静态变量`value1`具有常量初始值,因此编译器可以在编译时计算它的初始值。在第二个例子中,变量`size`是一个非常量,编译器无法在编译时确定它的值,因此导致错误。 最后需要注意的是,如果你使用的是C++11或更新的版本,并且编译器支持变长数组,你可以通过`std::vector`或类似的容器来避免通过变量初始化静态数组的问题。例如: ```c++ std::vector<int> arr3(size); // C++11中支持变长数组 ``` 总之,“initializer element is not constant”常常因为在编译期无法确定变量的值而出现。如果想要避免这种错误,我们应该尽可能地使用常量来初始化变量或者使用C++11中支持的变长数组来解决这个问题。 ### 回答3: 在程序代码中常会遇到 error: initializer element is not constant 的错误提示。这一提示通常是由于在定义变量时,使用了一个不是常量的表达式作为初始值导致的。 定义变量时,需要指定一个初始值,如果这个初始值不是一个常量,就会出现上述的错误提示。这是因为在变量定义时,编译器需要为变量分配空间,并将初始值存储到该空间内。而由于这个初始值不是常量,因此编译器无法确定它的值是否会改变,也就无法为变量分配确定的空间。 解决这一问题的方法是使用常量作为变量的初始值。常量是指在程序运行期间不会改变的值,例如字面量(如整数、浮点数、字符串等)或者用 const 关键字修饰的变量。这样,在编译时,编译器就能确定变量初始值的值,并为变量分配相应的空间。 需要注意的是,当定义的变量是静态变量或全局变量时,必须使用常量作为初始值,并确保该初始值在编译时已经确定。而对于自动变量和动态分配的内存空间,初始值可以是一个变量,只要该变量的值在程序运行期间不会改变即可。 综上所述,error: initializer element is not constant 错误提示通常是由于使用了非常量作为变量初始值导致的。解决方法是使用常量作为变量初始值,以确保编译器能够为变量分配正确的空间。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值