【问题标题】:What is " Variable ' i ' was not declared in scope " in c++?什么是 C++ 中的“变量‘i’未在范围内声明”?
【发布时间】: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 了,但是修复所有不合规的东西的痛苦仍然很新鲜。

标签: c++ variables scope


【解决方案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
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-09-18
      • 2017-02-12
      • 1970-01-01
      • 2017-08-19
      • 1970-01-01
      • 2018-03-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多