'int [0]'c ++的初始化程序太多了

时间:2014-01-16 02:10:32

标签: c++ arrays c++11 struct initialization

首先:

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上测试的代码

4 个答案:

答案 0 :(得分:28)

在C ++ 11中,允许使用类内成员初始值设定项,但基本上与在成员初始化列表中初始化相同。因此,必须明确说明数组的大小。

Stroustrup在他的网站here上有一个简短的解释。

错误消息表示您为长度为0的数组提供了太多项,这是int []在该上下文中评估的数据。

答案 1 :(得分:3)

在第一个例子中,实际发生了某些事情(实际内存分配)。计算机很容易计算给它的项目数量并将其用作容量。在第二次使用中,作为结构的一部分,数组只是结构模板的一部分。在第二种情况下,必须在编译时明确给出并知道大小。这里没有自动计数。它与函数声明与定义以及变量声明(告诉类型但内存未被触及)以及它们的调用/使用(程序在其中起作用)类似。

答案 2 :(得分:1)

可能在struct中导致编译器需要您明确指定大小。

C initialize array within structure(双关语)

答案 3 :(得分:1)

这是两个完全不同的背景:

第一个是变量声明(带有初始化子句)。

第二个是类型定义。