msc*_*msc -6 c++ for-loop c++17
我在 C++17 中制作了基于嵌套范围的 for 循环程序。
#include <iostream>
#include <vector>
int main()
{
std::vector<int> v = {0, 1, 2, 3, 4, 5};
for (int i : v)
{
for (int a : i)
std::cout << a << ' ';
}
}
Run Code Online (Sandbox Code Playgroud)
GCC 产生错误:
main.cpp: In function 'int main()':
main.cpp:10:22: error: 'begin' was not declared in this scope
for (int a : i)
Run Code Online (Sandbox Code Playgroud)
所以,
这个问题与嵌套循环无关。
下面的代码片段是无意义的,编译器试图理解它:
int main() {
std::vector<int> v = {0, 1, 2, 3, 4, 5};
for (int i : v) {
for (int a : i)
std::cout << a << ' ';
}
}
Run Code Online (Sandbox Code Playgroud)
因此,该错误消息也是无意义的。这就像向编译器提供随机字符,然后编译器返回“缺失;”。
尤其:
for (int i : v)
for (int a : i)
Run Code Online (Sandbox Code Playgroud)
第一行声明i为类型int。那么,第二行如何迭代int?int不是数组,也不是用户/库定义的。
可以迭代的类型是数组,以及带有成员begin()/的用户/库定义的类型end(),以及在其命名空间中带有非成员自由函数begin()/ 的类型end(),其begin()/end()返回类似迭代器(或指针)的东西。
gcc试图将其视为可迭代对象。它不是一个数组。它没有成员begin()。它不是在包含 non-member 的命名空间中定义的begin()。这使得 gcc 在此时放弃,并输出一条消息,表明它无法begin()在无意义的位置找到非成员(因为int没有定义点)。
这将产生相同的错误:
int i;
for( int a:i );
Run Code Online (Sandbox Code Playgroud)