c ++ for循环:'i'未在此范围内声明

ash*_*tor 0 c++ debugging

bool linear_search(const string A[], int n, string colour, int &count)
{
    for (int i = 0; i < n; i++);
    {
        if (colour == A[i])
        {
            return true;
        }
    }
    return false;
}
Run Code Online (Sandbox Code Playgroud)

编译错误上面的代码结果'i' was not declared in this scopeif声明if (colour == A[i]).

这与我编写的许多其他for循环非常类似,我不明白为什么它没有在范围中声明.是不是在前一行宣布了?我该如何解决?

小智 7

你的for循环声明后你有一个半冒号,删除它,你会没事的.


bam*_*s53 5

正如其他人指出的那样,问题在于一个额外的分号,它阻止了您预期的循环体实际上成为循环的一部分。但我想提供更多有关如何捕获和避免此类错误的信息。

首先,当我用你显示的格式编译代码时,我的编译器会产生一个警告:

main.cpp:130:32: warning: for loop has empty body [-Wempty-body]
    for (int i = 0; i < n; i++);
                               ^
Run Code Online (Sandbox Code Playgroud)

您应该检查是否已经收到此警告或类似警告,如果是,您应该确保在将来注意警告。如果您没有收到此警告,请查看是否可以通过某种方式提高编译器的警告级别,使其产生这样的警告。启用并关注编译器警告可以为您省去很多麻烦。

接下来,我注意到您的代码格式很差。糟糕的格式可以隐藏这种错误。当我自动格式化代码时,它变成:

bool linear_search(const string A[], int n, string colour, int &count) {
  for (int i = 0; i < n; i++)
    ;
  {
    if (colour == A[i]) {
      return true;
    }
  }
  return false;
}
Run Code Online (Sandbox Code Playgroud)

这种格式使无关的分号更加明显。(它还抑制了我的编译器关于空体的警告,因为编译器假定如果您将空体放在单独的行上,那么您实际上意味着它为空。)使用自动格式可避免格式不一致的问题并确保格式与代码的实际含义一致。看看你的编辑器是否提供格式化支持,或者看看你是否可以集成像 clang-format 这样的外部格式化程序。