错误:对于'范围',ISO'的名称查找已更改为''

时间:2014-06-24 14:58:49

标签: c++ c c++11

我正在尝试编译我的代码我收到以下错误:

error: name lookup of ‘x’ changed for ISO ‘for’ scoping [-fpermissive]
note: (if you use ‘-fpermissive’ G++ will accept your code)

任何人都可以帮助我。提前致谢。

int main() {

  int a,m;

  cout << "Enter values of a and m:" << endl;
  cin >> a >> m;
  a %= m;

  for(int x = 1; x < m; x++) 
  {
    if((a*x) % m == 1) 
      return x;
  }

  cout << "the value of x" << x << endl;
}

3 个答案:

答案 0 :(得分:1)

x的范围仅限于for循环,因为您在那里声明了它。如果要在外部使用它,请在适当的范围内声明它,如下所示:

int main() {

           int a,m;

           cout << "Enter values of a and m:" << endl;
           cin >> a >> m;
           a %= m;
           int x; 
           for(x=1; x < m; x++) 
            {
              if((a*x) % m == 1) 
              return x;
            }

          cout <<"the value of x"<<x<<endl;

}

答案 1 :(得分:0)

问题是变量x确实是for循环的局部变量,不能在它之外使用。

显然G ++有一个扩展,允许在循环之外使用“index”变量,但你必须添加-fpermissive标志才能允许它。但请注意,-fpermissive标志还允许其他不适合“C ++”的东西。

答案 2 :(得分:0)

这是有问题的一行:

cout <<"the value of x"<<x<<endl;

这有问题,因为它在for循环体外使用变量x。

要解决问题,要么将cout行放在for循环中,要么在for行之前声明x值,而不是作为其一部分。