c++编译错误提示[Error] name lookup of 'i' changed for ISO 'for' scoping

在VC 6 中,i的作用域范围是函数作用域,在for循环外仍能使用变量i 即:
for (int i = 0; i < n; ++i) {
//……
}
cout<< i<< endl;
可以通过

for (int i = 0; i < n; ++i) {
//……
}
int i = 5;
则编译出错。

在DEV C++ 中,i的作用域仅限于for循环,即:
for (int i = 0; i < n; ++i) {
//……
}
int i = 5;
可以通过

for (int i = 0; i < n; ++i) {
//……
}
cout<< i<< endl;
则编译出错。

在vs.net 中,两种都能通过,但是若在for循环外使用i是,会给出警告。

  • 12
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
### 回答1: 这个错误消息表明在程序中变量 "i" 的作用域发生了改变,并且与 ISO C++ 标准不符。如果编译器选项 "-fpermissive" 被使用,编译器将尝试继续处理代码,但是错误仍然存在,可能导致程序运行不正确。建议修改代码使其符合 ISO C++ 标准。 ### 回答2: “name lookup of 'i' changed for iso 'for' scoping [-fpermissive]”这个错误信息是由于C++代码中for循环范围内的变量i与外部某个变量名称相同,编译器无法识别变量i的作用域,所以会产生这个错误。 该错误可以通过更改变量名称或通过使用花括号来明确变量的作用域来解决。例如,在for循环中,可以使用花括号来明确变量i的作用域,如下所示: for (int j = 0; j < 10; j++) { int i = 0; // ... } 另外,还可以使用变量名称空间来解决该错误。例如,可以将for循环中的变量i放在另一个命名空间中,如下所示: namespace myNamespace { int i = 0; } for (int j = 0; j < 10; j++) { using namespace myNamespace; // ... } 通过这种方式,编译器将能够识别变量i属于哪个名称空间,进而避免了上述错误的发生。 总之,如果出现"name lookup of 'i' changed for iso 'for' scoping [-fpermissive]"这个错误信息,需要仔细检查代码,并考虑更改变量名称或使用花括号或变量名称空间等方式来解决该问题。 ### 回答3: 这个错误信息是由于在C++语言中的作用域问题,具体表现就是变量i的作用域被限定在一个特定的区域中,但在代码中i被调用时其作用域已经发生了改变,因此编译器会报错。 这个问题通常发生在多个循环嵌套或多个if语句嵌套的程序中,因为在这些情况下,变量的作用域和可见性很难确定。通常来说,每个代码块都有一个自己的作用域,变量在这个作用域中被定义,只有在这个作用域中才能被访问。如果在外层作用域中访问变量,编译器就会报错。 解决这个问题的办法是要确保变量的作用域和可见性是正确的,特别是在循环和条件语句中。可以通过将变量定义在循环或if语句内部来避免这个问题。此外,可以使用作用域限定符“::”来显式地指定变量的作用域。 总之,当C++编译器出现“[error] name lookup of 'i' changed for iso 'for' scoping [-fpermissive]”这个错误提示时,应该注意变量的作用域和可见性,将变量的定义放在正确的作用域中,或使用作用域限定符来避免这个问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值