not*_*orb 6 c++ initialization aggregate-initialization stdarray
以下代码返回下面的编译错误。我一直无法理解为什么初始化程序太多。该代码使用vector<X>. 有谁知道为什么会报告错误以及如何解决?谢谢
#include <iostream>\n#include <array>\nusing namespace std;\n\nstruct X {\n int x, y;\n};\n\nint main(int argc, char *argv[])\n{\n array<X,2> a0 = {{0,1}, {2,3}};\n\n for (auto& p : a0) {\n cout << p.x << endl;\n cout << p.y << endl;\n }\n\n return 0;\n}\nRun Code Online (Sandbox Code Playgroud)\n\n汇编:
\n\ng++ -pedantic -Wall test116.cc && ./a.out\ntest116.cc: In function \xe2\x80\x98int main(int, char**)\xe2\x80\x99:\ntest116.cc:11:34: error: too many initializers for \xe2\x80\x98std::array<X, 2>\xe2\x80\x99\n array<X,2> a0 = {{0,1}, {2,3}};\nRun Code Online (Sandbox Code Playgroud)\n
Art*_*cca 12
尝试
array<X,2> a0 = {{{0,1}, {2,3}}};
Run Code Online (Sandbox Code Playgroud)
请注意额外的一组大括号。
这看起来有点奇怪,但它是这样的,因为 的唯一成员array是实际的数组:
template <class T, size_t N>
class array {
T val[N];
// ...
};
Run Code Online (Sandbox Code Playgroud)
构造函数都是隐式定义的,因此array最终成为一个简单的可构造类型。