С++ "не был объявлен в этой области" ошибка компиляции
Новый для С++. В следующей программе, которую я пишу, я получаю эту ошибку:
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);
}
}
Может ли кто-нибудь помочь мне здесь? Спасибо.
Ответы
Ответ 1
Что не так:
В определении "nonrecursivecountcells" нет параметра с именем grid. Вам нужно передать имя типа И переменной в функцию. Вы только передавали тип.
Обратите внимание, что если вы используете сетку имен для параметра, это имя не имеет ничего общего с вашим объявлением main() сетки. Вы могли бы использовать любое другое имя.
***
Также вы не можете передавать массивы как значения.
Как исправить:
Легкий способ исправить это - передать указатель на массив функции "nonrecursivecountcells".
int nonrecursivecountcells(color[ROW_SIZE][COL_SIZE], int, int);
лучше и безопасный тип →
int nonrecursivecountcells(color (&grid)[ROW_SIZE][COL_SIZE], int, int);
О области:
Переменная, созданная в стеке, выходит из области действия, когда объявленный ею блок завершается. Блок находится в пределах открытия и сопоставления. Например, if() {}, function() {}, а() {},...
Примечание. Я сказал переменную, а не данные. Например, вы можете выделить память в куче, и данные все равно останутся действительными даже вне области. Но переменная, которая первоначально указывала на нее, все равно вышла бы за рамки.
Ответ 2
сетка не является глобальной, она локальна для основной функции. Измените это:
int nonrecursivecountcells(color[ROW_SIZE][COL_SIZE], int row, int column)
:
int nonrecursivecountcells(color grid[ROW_SIZE][COL_SIZE], int row, int column)
В основном вы забыли указать этот первый параметр имени, сетка будет делать, поскольку он соответствует вашему коду.
Ответ 3
Первый аргумент nonrecursivecountcells() не имеет имени переменной. Вы пытаетесь ссылаться на нее как на сетку в теле функции, поэтому вы, вероятно, захотите назвать ее сеткой.
Ответ 4
Как компилятор говорит, grid
не был объявлен в рамках вашей функции:) "Сфера" в основном означает набор фигурных скобок. Каждая переменная ограничена областью, в которой она объявлена (к ней нельзя получить доступ за пределами этой области). В вашем случае вы объявляете переменную grid
в своей функции main()
и пытаетесь использовать ее в nonrecursivecountcells()
. Кажется, вы передаете его как аргумент colors
, поэтому я предлагаю вам просто переименовать ваши применения grid
в nonrecursivecountcells()
в colors
. Я думаю, что может быть что-то не так, пытаясь передать массив таким образом, чтобы вы, вероятно, исследовали передачу его как указателя (если кто-то еще не сказал что-то противное).
Ответ 5
сетка отсутствует в области nonrecursivecountcells.
Либо сделайте сетку глобальным массивом, либо передайте его как параметр функции.
Ответ 6
Объявление функции фиксации
int nonrecursivecountcells(color grid[ROW_SIZE][COL_SIZE], int row, int column)