【问题标题】:Too many initializers for array in C++C ++中数组的初始化程序太多
【发布时间】:2014-10-25 23:20:01
【问题描述】:

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

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

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

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

但是,VC++ 给了我一个Too many initializer valueserror。为什么会这样?

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

【问题讨论】:

  • 您似乎正在尝试将 assign 分配给一个数组。请发布 MCVE。
  • 什么是 MCVE?我不知道。是的,我正在尝试在构造函数中赋值。
  • 您的数组大小为64,您可能正在初始化更多元素。
  • 至于你的问题,complete声明是什么?

标签: c++ arrays


【解决方案1】:
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;
}

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

    • 不,那将是第 65 个元素。
    • 他用的是Visual C++,不支持数组的显式初始化
    • 我需要初始化大约 5-6 个数组和 5 个常量变量。如果我把它们放在初始化列表中,它看起来会很丑。还有其他方法吗?
    猜你喜欢
    • 1970-01-01
    • 2014-12-25
    • 2012-09-02
    • 2014-02-04
    • 2021-06-03
    • 1970-01-01
    • 2014-08-09
    • 2016-02-23
    • 1970-01-01
    相关资源
    最近更新 更多