C++: array<> 太多的初始值设定项
C++: array<> too many initializers
以下代码返回下面的编译错误。我无法理解如何有太多的初始值设定项。此代码使用 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}};
尝试
array<X,2> a0 = {{{0,1}, {2,3}}};
注意额外的一对大括号。
看起来有点奇怪,但它是这样的,因为 array
的唯一成员是实际数组:
template <class T, size_t N>
class array {
T val[N];
// ...
};
构造函数都是隐式定义的,因此 array
最终成为一个简单的可构造类型。
您可以使用以下初始化之一,因为 std::array
是一个包含另一个聚合作为其数据成员的聚合。
array<X,2> a0 = { { { 0, 1 }, { 2, 3 } } };
array<X,2> a0 = { 0, 1, 2, 3 };
array<X,2> a0 = { { 0, 1, 2, 3 } };
array<X,2> a0 = { { 0, 1, { 2, 3 } } };
array<X,2> a0 = { { { 0, 1 }, 2, 3 } };
我发现我的问题和版本的g++有关,9.4.0没问题,5.4 .0不是。g++的版本。顺便说一句,g++的版本一般是和系统版本相关联的。
以下代码返回下面的编译错误。我无法理解如何有太多的初始值设定项。此代码使用 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}};
尝试
array<X,2> a0 = {{{0,1}, {2,3}}};
注意额外的一对大括号。
看起来有点奇怪,但它是这样的,因为 array
的唯一成员是实际数组:
template <class T, size_t N>
class array {
T val[N];
// ...
};
构造函数都是隐式定义的,因此 array
最终成为一个简单的可构造类型。
您可以使用以下初始化之一,因为 std::array
是一个包含另一个聚合作为其数据成员的聚合。
array<X,2> a0 = { { { 0, 1 }, { 2, 3 } } };
array<X,2> a0 = { 0, 1, 2, 3 };
array<X,2> a0 = { { 0, 1, 2, 3 } };
array<X,2> a0 = { { 0, 1, { 2, 3 } } };
array<X,2> a0 = { { { 0, 1 }, 2, 3 } };
我发现我的问题和版本的g++有关,9.4.0没问题,5.4 .0不是。g++的版本。顺便说一句,g++的版本一般是和系统版本相关联的。