嵌套循环c ++之外的变量范围

时间:2014-04-09 12:45:05

标签: c++

对于变量:X下面,我可以在case1中打印,但为什么我不能在case2中打印值X?

std::vector<double> X;
double a = -1;

for(int i = 0; i < m; i++){
    for(int j = 0; j < n; j++){

        double b = 0; 
        if(a <0){
            b = a + i*i - 100;
        } 
        if(b > 0){
            X.push_back(b);
        }

    }
std::cout << "case1:" << X.size() << std::endl;
}

std::cout << "case2:" << X.size() << std::endl;

2 个答案:

答案 0 :(得分:2)

变量b仅存在于if语句的复合语句中

    if(a < 0){

        int b = a;
    }

编译器应为第二个if语句

发出错误
    if(b != 0){

        X.push_back(b);
    }

因为在此声明性区域中未定义名称b。

您可以通过以下方式重写代码段

std::vector<double> X;
int a = -1;

for(int i = 0; i < m; i++){
    for(int j = 0; j < n; j++){

        int b = 0;

        if(a < 0){

            b = a;
        }
        if(b != 0){

            X.push_back(b);
        }

    }
}

std::cout << X.size();

它至少会被编译

如果您将尝试此代码,那么只要正确声明和初始化所有变量(包括m和n),矢量的大小将被输出。

答案 1 :(得分:0)

您的变量b仅存在于其创建的if()语句中。因此,当您尝试将其推送到向量时,它超出了范围,您无法再访问它。如果您想要做同样的事情,只需将int b移到if()语句之上,但仍然在循环内。