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

时间:2015-09-20 20:47:41

标签: 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;
}

编译上述代码会导致'i' was not declared in this scope语句if出现错误if (colour == A[i])

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

5 个答案:

答案 0 :(得分:7)

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

答案 1 :(得分:4)

正如其他人所指出的,问题是一个额外的分号,可以防止你想要的循环体实际上成为循环的一部分。但我想提供更多有关如何捕获和避免此类错误的信息。

首先,当我使用您显示的格式编译代码时,我的编译器会发出警告:

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

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

接下来,我注意到您的代码格式不正确。格式不佳可能会隐藏此类错误。当我自动格式化代码时,它变为:

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

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

答案 2 :(得分:1)

你确定你需要;在这一行? for (int i = 0; i < n; i++);

答案 3 :(得分:0)

你通过添加a来结束循环块;在for循环之后

for (int i = 0; i < n; i++);

删除此分号。

答案 4 :(得分:0)

我遇到了类似的问题,但是在“for”循环前面的变量声明之前有一个“if”语句,错误是一样的。以防万一有人用谷歌搜索它而没有提到类似的东西:

if (someVar!=1) // an "if" statement that reduces the scope of "var"
//some comment line
//some other comment line
double var = 0.0;

for (size_t i = 0; i < length; i++) {
    var *= 0.5; // Error appeared here
}