首先:
int k[] ={1,2,3,4,5};
其次:
struct slk
{
int k[] ={1,2,3,4,5};
};
这两个语句为什么第一个可以通过编译但第二个会给我
error:too many initializers for 'int [0]'. 如果我设置k[5];则可以通过编译。
这个错误消息是什么意思?注意:代码测试于GNU GCC 4.7.2版本。
首先:
int k[] ={1,2,3,4,5};
其次:
struct slk
{
int k[] ={1,2,3,4,5};
};
这两个语句为什么第一个可以通过编译但第二个会给我
error:too many initializers for 'int [0]'. 如果我设置k[5];则可以通过编译。
这个错误消息是什么意思?注意:代码测试于GNU GCC 4.7.2版本。
在C++11中,允许使用类内成员初始化器,但实际上与在成员初始化列表中初始化的行为基本相同。因此,必须明确声明数组的大小。
Stroustrup在他的网站这里有一个简短的解释。
该错误消息意味着你提供了太多的项目给长度为0的数组,这是在该上下文中int []
求值得到的。
struct
可以有构造函数,因此数组可以用另一种方式初始化,这可能导致推断出不兼容的类型。这在全局或函数作用域中声明和初始化的变量中不会发生。这与 此 问题有关。 - Ale这是两个完全不同的上下文:
第一个是变量声明(带有初始化子句)。
第二个是类型定义。
int k[5]={1,2,3,4,5};
,但我无法解释为什么。 - ValarDohaeris