错误:ISO ' for '作用域更改了' x '的名称查找

Error: name lookup of ‘x’ changed for ISO ‘for’ scoping

本文关键字:查找 作用域 ISO for 错误      更新时间:2023-10-16

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

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;
}

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;
}

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

显然,g++有一个扩展允许在循环之外使用"index"变量,但是您必须添加-fpermissive标志才能允许它。但请注意,-fpermissive标志也允许其他不"适当"的c++操作。

这是有问题的一行:

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

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

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