C ++“未在此范围内声明”编译错误

时间:2009-03-23 17:41:43

标签: c++ scope

C ++新手。在我写的以下程序中我得到了这个错误:

g++ -o Blob blob.cc
blob.cc: In function 'int nonrecursivecountcells(color (*)[7], int, int)':
blob.cc:41: error: 'grid' was not declared in this scope

以下是代码:

#include <iostream>
enum color {BACKGROUND, ABNORMAL, TEMPORARY};
const int ROW_SIZE = 7;
const int COL_SIZE = 7;
int nonrecursivecountcells(color[ROW_SIZE][COL_SIZE], int, int);
using namespace std;


int main() 
{
  color grid[ROW_SIZE][COL_SIZE] =
    {{BACKGROUND, ABNORMAL, BACKGROUND, ABNORMAL, BACKGROUND, BACKGROUND, BACKGROUND},
      {ABNORMAL, ABNORMAL, BACKGROUND, ABNORMAL, BACKGROUND, BACKGROUND, BACKGROUND},
       {BACKGROUND, BACKGROUND, ABNORMAL, ABNORMAL, BACKGROUND, BACKGROUND, ABNORMAL},
        {BACKGROUND, BACKGROUND, BACKGROUND, ABNORMAL, ABNORMAL, ABNORMAL, BACKGROUND},
         {BACKGROUND, BACKGROUND, BACKGROUND, ABNORMAL, BACKGROUND, BACKGROUND, BACKGROUND},
          {BACKGROUND, BACKGROUND, BACKGROUND, BACKGROUND, BACKGROUND, ABNORMAL, BACKGROUND},
           {BACKGROUND, ABNORMAL, ABNORMAL, BACKGROUND, BACKGROUND, BACKGROUND, ABNORMAL}};

   cout << "Enter row number" << endl;
   int row;
   cin >> row;
   cout << "Enter column number" << endl;
   int column;
   cin >> column;

   int number = nonrecursivecountcells(grid, row, column);
   cout << "Number off cells in the blob that contains grid[" << row << "][" << column << "] are: " << number << endl;

   return 0;

}

int nonrecursivecountcells(color[ROW_SIZE][COL_SIZE], int row, int column)
{
  if (row < 0 || row >= ROW_SIZE || column < 0 || column >= COL_SIZE)
  {
    return 0;
  }

  else if (grid[row][column] != ABNORMAL)
  {
    return 0;
  }

  else
  {
    grid[row][column] = TEMPORARY;
    return 1
    + nonrecursivecountcells(grid, row - 1, column - 1) + nonrecursivecountcells(grid, row - 1, column)
    + nonrecursivecountcells(grid, row - 1, column + 1) + nonrecursivecountcells(grid, row, column + 1)
    + nonrecursivecountcells(grid, row + 1, column + 1) + nonrecursivecountcells(grid, row + 1, column)
    + nonrecursivecountcells(grid, row + 1, column - 1) + nonrecursivecountcells(grid, row, column - 1);
  }
}

任何人都可以帮助我吗?感谢。

6 个答案:

答案 0 :(得分:14)

出了什么问题:

“nonrecursivecountcells”的定义没有名为grid的参数。您需要将类型AND变量名称传递给函数。你只传递了这种类型。

请注意,如果对参数使用名称网格,则该名称与网格的main()声明无关。您也可以使用任何其他名称。

***Also you can't pass arrays as values.


如何解决:

解决这个问题的简单方法是将指向数组的指针传递给函数“nonrecursivecountcells”。

int nonrecursivecountcells(color[ROW_SIZE][COL_SIZE], int, int);

更好,输入更安全 - &gt;

int nonrecursivecountcells(color (&grid)[ROW_SIZE][COL_SIZE], int, int);

关于范围:

当声明它的块终止时,在堆栈上创建的变量超出范围。块是开口内的任何内容,匹配右括号。例如,if(){},function(){},while(){},...

注意我说变量而不是数据。例如,您可以在堆上分配内存,即使在范围之外,该数据仍将保持有效。但最初指向它的变量仍然会超出范围。

答案 1 :(得分:4)

网格不是全局的,它是主要功能的本地。改变这个:

int nonrecursivecountcells(color[ROW_SIZE][COL_SIZE], int row, int column)

到此:

int nonrecursivecountcells(color grid[ROW_SIZE][COL_SIZE], int row, int column)

基本上你忘了给第一个参数赋一个名字,网格会做,因为它匹配你的代码。

答案 2 :(得分:1)

nonrecursivecountcells()的第一个参数没有变量名。您尝试在函数体中将其引用为网格,因此您可能希望将其称为网格。

答案 3 :(得分:1)

正如编译器所说,grid未在函数范围内声明:)“Scope”基本上是指一组花括号。每个变量都限于声明它的范围(不能在该范围之外访问)。在您的情况下,您在grid函数中声明main()变量并尝试在nonrecursivecountcells()中使用它。您似乎将其作为参数colors传递,因此我建议您将gridnonrecursivecountcells()的使用重命名为colors。我认为尝试以这种方式传递数组可能有问题,所以你应该调查将它作为指针传递(除非别人说的相反)。

答案 4 :(得分:0)

nonrecursivecountcells的范围中不存在

网格

grid 设为全局数组,或将其作为参数传递给函数。

答案 5 :(得分:0)

修复

上的函数声明
int nonrecursivecountcells(color grid[ROW_SIZE][COL_SIZE], int row, int column)