"int [0]"C++ 的初始值设定项太多

too many initializers for 'int [0]' c++

本文关键字:太多 int C++      更新时间:2023-10-16

First:

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

class="answers> 在

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

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

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

在第一个示例中,某些事情(实际内存分配)实际上正在发生。计算机可以轻松计算提供给它的物品数量,并将其用作容量。在第二次使用中,作为结构的一部分,数组只是结构模板的一部分。在第二种情况下,必须在编译时显式给出并知道大小。这里没有自动计数。它类似于函数声明与定义以及变量声明(告诉类型但内存不变)及其调用/使用(程序起作用的地方)。

可能是因为struct编译器需要您显式指定大小。

C 初始化结构中的数组(双关语)

这是两个完全不同的上下文:

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

第二个是类型定义。