"iterator cannot be defined in the current scope" 错误
"iterator cannot be defined in the current scope" error
我是一名新手 C++ 程序员,正在解决一个简单的问题,即打印出 name-and-score 对。在这里,我使用 std::unordered_set
作为名称,使用矢量作为分数(接受重复的分数,但不接受名称)并且效果很好。
但是有一件事让我对结果感到困惑,那就是如果我尝试在 for 循环中初始化迭代器,编译器会给我一个错误
the iterator "cannot be defined in the current scope."
这给出了错误:
for (int i = 0, std::unordered_set<std::string>::iterator it = names.begin();
i < names.size(); i++, it++)
{
std::cout << *it << ", " << scores[i] << '\n';
}
但是移到循环之外,它工作正常:
std::unordered_set<std::string>::iterator it = names.begin();
for (int i = 0; i < names.size(); i++, it++)
{
std::cout << *it << ", " << scores[i] << '\n';
}
这里为什么必须在循环外初始化迭代器?很抱歉这个简单的问题,我在别处搜索过并没有找到明确的答案。
在 C++ 中 for-
loop
for ( declaration-or-expression(optional) ; declaration-or-expression(optional) ; expression(optional) )
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
init-statement
- either an expression statement (which may be a null statement ";")
- a simple declaration, typically a declaration of a loop counter variable with initializer, but it may declare arbitrary many variables
Note that any init-statement must end with a semicolon ;, which is why it is often described informally as an expression or a declaration followed by a semicolon.
因此,您可以声明相同类型的变量;例如:
for (int i = 0, j = 1; ... ; i++, j++) {...}
^^^^^^^^^^^^^^^^
或初始化您之前声明的任何类型的变量。例如
std::unordered_set<std::string>::iterator it;
int i;
for (it = names.begin(), i = 0; i < names.size(); i++, it++) { ... }
^^^^^^^^^^^^^^^^^^^^^^^^^^^
因此,您的尝试失败了。
我是一名新手 C++ 程序员,正在解决一个简单的问题,即打印出 name-and-score 对。在这里,我使用 std::unordered_set
作为名称,使用矢量作为分数(接受重复的分数,但不接受名称)并且效果很好。
但是有一件事让我对结果感到困惑,那就是如果我尝试在 for 循环中初始化迭代器,编译器会给我一个错误
the iterator "cannot be defined in the current scope."
这给出了错误:
for (int i = 0, std::unordered_set<std::string>::iterator it = names.begin();
i < names.size(); i++, it++)
{
std::cout << *it << ", " << scores[i] << '\n';
}
但是移到循环之外,它工作正常:
std::unordered_set<std::string>::iterator it = names.begin();
for (int i = 0; i < names.size(); i++, it++)
{
std::cout << *it << ", " << scores[i] << '\n';
}
这里为什么必须在循环外初始化迭代器?很抱歉这个简单的问题,我在别处搜索过并没有找到明确的答案。
在 C++ 中 for-
loop
for ( declaration-or-expression(optional) ; declaration-or-expression(optional) ; expression(optional) )
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
init-statement
- either an expression statement (which may be a null statement ";")
- a simple declaration, typically a declaration of a loop counter variable with initializer, but it may declare arbitrary many variables Note that any init-statement must end with a semicolon ;, which is why it is often described informally as an expression or a declaration followed by a semicolon.
因此,您可以声明相同类型的变量;例如:
for (int i = 0, j = 1; ... ; i++, j++) {...}
^^^^^^^^^^^^^^^^
或初始化您之前声明的任何类型的变量。例如
std::unordered_set<std::string>::iterator it;
int i;
for (it = names.begin(), i = 0; i < names.size(); i++, it++) { ... }
^^^^^^^^^^^^^^^^^^^^^^^^^^^
因此,您的尝试失败了。