什么是C ++中的“变量'i'未在作用域中声明”?

时间:2019-01-11 12:54:11

标签: c++ variables scope

在练习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;
        }
    }

3 个答案:

答案 0 :(得分:4)

您必须为每个作用域声明变量:

#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
}

答案 1 :(得分:4)

i仅在第一个for循环的作用域内定义,因此需要在第二个循环中重新声明。

早期的Microsoft C ++编译器存在一个错误,其中i泄漏到for循环的范围内以有效地产生

int i;
for (i = 0; i < 10; i++){

答案 2 :(得分:3)

通过编写for(int i=0; i<10; i++) {...},您可以在int i循环范围内声明for,并且仅在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循环中重复声明,然后int i循环中的for就是完全不同的变量。

#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
}