什么是 C++ 中的“变量‘i’未在范围内声明”?
Posted
技术标签:
【中文标题】什么是 C++ 中的“变量‘i’未在范围内声明”?【英文标题】:What is " Variable ' i ' was not declared in scope " in c++? 【发布时间】:2019-01-11 12:54:11 【问题描述】:在练习 C++ 代码时,我使用了在 for 循环中声明的变量。我希望它在另一个 for 循环中再次使用它。但它向我显示了一个错误,即
variable i was not declared in scope
我在 Eclipse IDE 中尝试了它向我展示的相同循环
the symbol i was not resolved
.
示例代码如下所示:
#include<iostream>
using namespace std;
int main()
for(int i=0;i<10;i++)
cout<<i;
for(i=10;i<20;i++)
cout<<i;
【问题讨论】:
你必须在第二个循环中再次声明它,因为它在第一个循环之后超出了范围。i
仅存在 inside 第一个循环,因为您在那里声明了它。尝试在第二个循环中使用它会给您带来错误。如果您将 int i;
移到该循环之前,或者在第二个循环中重新声明它,它将起作用。
为我工作。我正在使用 Visual Studio 6 ;)
@virgesmith:是的,那是那个编译器的一个错误。
@Bathsheba,我知道。我已经有多年没有真正使用过 VS6 了,但是修复所有不合规的东西的痛苦仍然很新鲜。
【参考方案1】:
你必须为每个作用域声明变量:
#include<iostream>
using namespace std;
int main()
for(int i=0;i<10;i++)
cout<<i;
for(int i=10;i<20;i++)
cout<<i;
在第一个循环之后,不再有i
。你可以试试编译器说的,看看会不会失败:
int main()
for(int i=0;i<10;i++)
cout<<i;
cout<<i; // Error
【讨论】:
【参考方案2】:i
只定义在第一个for
循环的范围内,所以需要在第二个循环中重新声明。
早期的 Microsoft C++ 编译器存在一个错误,即 i
泄漏到 for
循环的范围内以有效生成
int i;
for (i = 0; i < 10; i++)
【讨论】:
你的意思是i
泄露了for循环的范围out?或者实际上是关于一个循环的i
的错误泄漏到下一个循环的范围内?
@user463035818:我已将等效代码放入其中。据我所知,i
的初始化发生在循环其自身中。
有趣,猜猜这可能会导致各种令人困惑的错误,另一方面,如果i
已经在外部范围内声明,则应该会出错【参考方案3】:
通过编写for(int i=0; i<10; i++) ...
,您在for
循环范围内声明int i
,它仅在for
循环内有效。
如果你想重复使用int i
,那么你应该把它放在&之外的任何for
循环之前:
#include<iostream>
using namespace std;
int main()
int i = 0;
for(i=0; i<10; i++)
cout<<i;
for(i=10; i<20; i++)
cout<<i;
cout<<i; // <- fine, 20
或者,只需在每个for
循环中重复声明,然后for
循环中的int i
是完全不同的变量。
#include<iostream>
using namespace std;
int main()
for(int i=0; i<10; i++)
cout<<i;
for(int i=10; i<20; i++)
cout<<i;
//cout<<i; <- oops!!! error
【讨论】:
以上是关于什么是 C++ 中的“变量‘i’未在范围内声明”?的主要内容,如果未能解决你的问题,请参考以下文章