什么是 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&lt;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’未在范围内声明”?的主要内容,如果未能解决你的问题,请参考以下文章

什么是 C++ 中的“查询参数”?

什么是 C++ 中的 ScopeGuard?

什么是 C++ 中的转换构造函数?它是干什么用的?

什么是 C++ 中的就地构造函数? [复制]

什么是 C++ 中的可调用对象?

什么是 C++ 中的空指针? [复制]