СЗ "не было заявлено в этой области" ошибка компиляции

Новое для 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

Что случилось:

Определение "nonrecursivecountcells" не имеет параметра, названного сетки. Вам нужно передать функцию типа и переменного имени. Вы только прошли тип.

Примечание, если вы используете сетку имен для параметра, это имя не имеет ничего общего с вашей основной () объявление сетки. Вы могли бы использовать любое другое имя, а также.

***Also you can't pass arrays as values. 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);

О масштабе:

Переменная, созданная на стеке, выходит из сферы действия, когда блок, в которого он объявляется, прекращается. Блок что-нибыдь внутри отверстие и «-38-» сопрягая «-39-» скобка закрытия. Например, если ()

Примечание я сказал переменной, а не данные. Например, можно выделить память на куче, и эти данные останутся действительными даже за пределами области. Но переменная, которая первоначально указывала на нее, все равно выйдет из сферы действия.

Сетка

не присутствует в сфере nonrecursivecountcells.

либо сделать сетку глобальным массивом, либо передать ее в качестве параметра функции.

Сетка

не является глобальной, она локальная для основной функции. Измените это:

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

к этому:

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

В основном вы забыли дать, что первый парам имя, сетка будет делать, поскольку он соответствует вашему коду.

фиксация функциофиксирования на

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

Первый аргумент к nonrecursivecountcells() не имеет переменного имени. Вы пытаетесь ссылаться на него как на сетку в теле функции, поэтому, вероятно, вы хотите назвать его сеткой.

Как говорит компилятор, grid was not declared in the scope of your function :) "Scope" basically means a set of curly braces. Every variable is limited to the scope in which it is declared (it cannot be accessed outside that scope). In your case, you're declaring the не был заявлен в рамках вашей функции :) "Scope" в основном означает набор фигурных скобки. Каждая переменная ограничена областью, в которой она объявлена (она не может быть доступна за пределами этой области). В вашем случае вы объявляете переменную grid variable in your в вашей функции main() function and trying to use it in и пытаетесь использовать ее в nonrecursivecountcells(). You seem to be passing it as the argument . Вы, кажется, проходите его в качестве аргумента colors however, so I suggest you just rename your uses of однако, поэтому я предлагаю вам просто переименовать использование grid in в nonrecursivecountcells() to на colors. I think there may be something wrong with trying to pass the array that way, too, so you should probably investigate passing it as a pointer (unless someone else says something to the contrary). . Я думаю, что может быть что-то неправильно с попыткой пройти массив таким образом, тоже, так что вы, вероятно, следует исследовать прохождения его в качестве указателя (если кто-то говорит что-то об обратном).