首先:
int k[] ={1,2,3,4,5};
第二
struct slk
{
int k[] ={1,2,3,4,5};
};
对于这两个陈述,为什么第一个通过编译但第二个给我
错误:'int [0]'的初始化程序太多。如果我设置k [5],则编译将通过;
此错误消息的含义是什么?注意:在GNU GCC版本4.7.2上测试的代码
答案 0 :(得分:28)
在C ++ 11中,允许使用类内成员初始值设定项,但基本上与在成员初始化列表中初始化相同。因此,必须明确说明数组的大小。
Stroustrup在他的网站here上有一个简短的解释。
错误消息表示您为长度为0的数组提供了太多项,这是int []
在该上下文中评估的数据。
答案 1 :(得分:3)
在第一个例子中,实际发生了某些事情(实际内存分配)。计算机很容易计算给它的项目数量并将其用作容量。在第二次使用中,作为结构的一部分,数组只是结构模板的一部分。在第二种情况下,必须在编译时明确给出并知道大小。这里没有自动计数。它与函数声明与定义以及变量声明(告诉类型但内存未被触及)以及它们的调用/使用(程序在其中起作用)类似。
答案 2 :(得分:1)
可能在struct
中导致编译器需要您明确指定大小。
答案 3 :(得分:1)
这是两个完全不同的背景:
第一个是变量声明(带有初始化子句)。
第二个是类型定义。