对于变量: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;
答案 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()
语句之上,但仍然在循环内。