【发布时间】:2018-05-31 17:41:27
【问题描述】:
跟进Range-for-statement cannot build range expression with array function parameter。
原来的错误是:
错误:无法使用数组函数参数“arr”构建范围表达式,因为数组类型“int []”的参数被视为指针类型“int *”
失败的代码:
void print(int (&arr)[int]){
for(int x: arr)
cout<<" "<<x;
cout<<endl;
}
固定代码:
template<int N>
void print(int (&arr)[N]){
for(int x: arr)
cout<<" "<<x;
cout<<endl;
}
我的问题是,为什么我们必须这样修复它?我不明白int (&arr)[int] 是什么意思。
【问题讨论】:
-
为什么这样可以修复错误?因为第一个示例不是有效的 c++ 而第二个示例是。我不清楚你到底在问什么。
-
“如何理解
int (&arr)[int]?”作为无效语法。 -
哪个编译器为您提供了第一个代码 sn-p 的错误消息?我已经通过 GCC、Clang 和 MSVC 运行了它,它们三个都给出了关于
[int]的错误 -
我使用了 g++ -std=c++11。