int main() {
int T;
cin>>T;
for(int i = 0 ; i < T ; ++i) {
cin>>a[i];
}
/*error:prog.cpp:41:6: error: name lookup of 'i' changed for ISO 'for' scoping [-fpermissive]*/
for(i = 0 ; i < T ; ++i) {
cout<<Z(a[i])<<'\n';
}
return 0;
}
当我在第二个for循环中的int
之前添加i
时,代码运行完美。
注意:a[]
和Z()
是在main()
之前定义的。
我是GCC 4.9.2的新手。到目前为止我使用过Turbo C ++。
答案 0 :(得分:5)
很久以前,在C ++中你的代码是合法的。在循环之后,for循环中声明的i
之类的标识符仍然可见。
改变了,到1998年C ++标准化时,for循环中声明的变量的范围只是循环的主体。
您的代码旨在与旧系统一起使用,编译器告诉您不再允许这样做。
在第二个循环中将for (i =
替换为(for int i =
,您就完成了。 (现在你有两个不同的变量叫i
而不是一个。)
答案 1 :(得分:4)
如果i
仅存在于for
循环的范围内,则声明。一旦退出,您将丢失i
声明,除非您在后续循环中重新声明它,否则无法重复使用它。
for(int i = 0 ; i < T ; ++i) {
cin>>a[i];
} // scope of i ends here
for(i = 0 ; i < T ; ++i) { // loop has no idea what i is now
cout<<Z(a[i])<<'\n';
}