c++ - 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}};
解决方案
尝试
array<X,2> a0 = {{{0,1}, {2,3}}};
注意额外的大括号。
这似乎有点奇怪,但它是这样的,因为唯一的成员array
是实际的数组:
template <class T, size_t N>
class array {
T val[N];
// ...
};
构造函数都是隐式定义的,因此array
最终成为一个可简单构造的类型。
推荐阅读
- scala - 当列名具有特殊字符(.点字符)时,df.na.fill 不起作用
- c++ - 在操作系统中一次可以打开多少个 SQLite DB 文件?
- mysql - MySQL - 计数器查询
- java - org.mockito.exceptions.verification.WantedButNotInvoked:
- node.js - 当我有 2 个名称相似的条目时出现错误
- azure-bot-service - Skype Bot ID、Microsoft App ID 和 Microsoft Azure Bot Service 之间是否存在依赖关系?
- git - 关于拉取请求的 Github 流程
- pyspark - PySpark - ValueError:无法将列转换为布尔值
- c# - 当似乎没有涉及“long”类型时,无法将类型“long”隐式转换为“int”
- django - Django 应用程序从 Mariadb 切换到 Postgresql