首页 > 解决方案 > C++:array<> 初始化器太多

问题描述

以下代码返回下面的编译错误。我一直在理解如何有太多的初始化程序。此代码使用vector<X>. 有谁知道为什么报告错误以及如何解决?谢谢

#include <iostream>
#include <array>
using namespace std;

struct X {
    int x, y;
};

int main(int argc, char *argv[])
{
    array<X,2> a0 = {{0,1}, {2,3}};

    for (auto& p : a0) {
        cout << p.x << endl;
        cout << p.y << endl;
    }

    return 0;
}

汇编:

g++ -pedantic -Wall test116.cc && ./a.out
test116.cc: In function ‘int main(int, char**)’:
test116.cc:11:34: error: too many initializers for ‘std::array<X, 2>’
     array<X,2> a0 = {{0,1}, {2,3}};

标签: c++initializationstdarrayaggregate-initialization

解决方案


尝试

array<X,2> a0 = {{{0,1}, {2,3}}};

注意额外的大括号。

这似乎有点奇怪,但它是这样的,因为唯一的成员array是实际的数组:

template <class T, size_t N>
class array {
    T val[N];
    // ...
};

构造函数都是隐式定义的,因此array最终成为一个可简单构造的类型。


推荐阅读