【发布时间】:2021-04-23 15:37:15
【问题描述】:
#include <algorithm>
#include <tuple>
#include <vector>
using namespace std;
int main() {
vector<vector<int>> points = {{3, 12}, {-2, 5}, {-4, 1}};
vector<tuple<int, int, int>> edges;
for (int u = 0; u < points.size(); ++u) {
for (int v = u + 1; v < points.size(); ++v) {
edges.emplace_back(u, v,
abs(points[v][0] - points[u][0]) +
abs(points[v][1] - points[u][1]));
}
}
sort(begin(edges), end(edges),
[](const auto &a, const auto &b) { return get<2>(a) < get<2>(b); });
int result = 0;
for (const auto &[u, v, val] : edges) {
result += val;
}
return 0;
}
用g++ -std=c++17 main.cc编译
得到以下困惑的错误:
main.cc:在函数“int main()”中:
main.cc:20:20: 错误:'[' token 之前的预期 unqualified-id
for (const auto &[u, v, val] : 边) { ^ main.cc:20:20: 错误:在“[”标记之前需要“;”
main.cc:20:21: 错误:'u' 未在此范围内声明
for (const auto &[u, v, val] : 边) { ^ main.cc:20:24: 错误:'v' 未在此范围内声明
for (const auto &[u, v, val] : 边) { ^ main.cc:20:27: 错误:'val' 未在此范围内声明
for (const auto &[u, v, val] : 边) { ^ main.cc:在 lambda 函数中:
main.cc:20:32: 错误:在“:”标记之前需要“{”
for (const auto &[u, v, val] : 边) { ^ main.cc: 在函数'int main()'中:
main.cc:20:32: 错误:在“:”标记之前需要“;”
main.cc:20:32: 错误:':' 标记之前的预期主表达式
main.cc:20:32: 错误:':' 标记之前的预期')'
main.cc:20:32: 错误:':' 标记之前的预期主表达式
如何解决这个错误? 注意:gcc 版本 5.4.0
【问题讨论】:
-
gcc 5.4.0 是否支持
C++17? -
在 GCC 7 中添加了结构化绑定支持。这是参考:gcc.gnu.org/projects/cxx-status.html#cxx17
-
也许用
for (const auto &val : edges)替换for (const auto &[u, v, val] : edges) -
添加行号会有所帮助。
标签: c++ algorithm vector tuples