C++中数组的初始值设定项太多

Too many initializers for array in C++

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

我正试图在Visual C++中初始化一个数组。

在我的头文件中,我这样声明数组
int pawnSquareTable[64];

在包含头文件的cpp文件中,我以以下方式初始化类的构造函数中的数组:

pawnSquareTable[64]={0,0,1,2.....64 values};

但是,VC++给了我一个Too many initializer values错误。为什么会发生这种情况?

编辑:
红色的波浪线在数组的第二个元素下面。

A::A()
    // : pawnSquareTable{1,2,3,4} // this would compile in clang/gcc
{
    // for MSVC, instead do this
    int* p = pawnSquareTable;
    for( int i : {1,2,3,4} ) // <- values here
        *p++=i;
}

当构造函数中有代码pawnSquareTable[64]={0,0,1,2.....64 values};时,实际上是在尝试设置单个元素pawnSquareTable[64](数组的第65个元素)的值。编译器希望得到一个int而不是初始值设定项列表,这就是错误的原因。

与其这样做,您应该在构造函数的初始化列表中初始化数组:

A::A() : pawnSquareTable{ 0, 1, 2 } //fill your values
{
}