what variable loop literal for define c++ scope

variable - pointers c++



C++ "no fue declarado en este alcance" compilar error (6)

Nuevo en C ++. En el siguiente programa que estoy escribiendo recibo este error:

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

Aquí está el código:

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

¿Puede alguien ayudarme aquí? Gracias.


Como dice el compilador, la grid no fue declarada en el alcance de su función :) "Ámbito" básicamente significa un conjunto de llaves. Cada variable está limitada al ámbito en el que se declara (no se puede acceder fuera de ese alcance). En su caso, está declarando la variable de grid en su función main() e intentando usarla en nonrecursivecountcells() de nonrecursivecountcells() . Sin embargo, parece que lo está pasando como el argumento colors , por lo que le sugiero que cambie el nombre de los usos de la grid en nonrecursivecountcells() por colors . Creo que puede haber algún problema al tratar de pasar la matriz de esa manera, también, por lo que probablemente deberías investigar pasarlo como un puntero (a menos que alguien más diga algo al contrario).


El primer argumento para nonrecursivecountcells () no tiene un nombre de variable. Intenta hacer referencia a ella como una cuadrícula en el cuerpo de la función, por lo que probablemente quiera llamarlo cuadrícula.


corregir declaración de función en

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


la cuadrícula no es global, es local para la función principal. Cambia esto:

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

a esto:

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

Básicamente, olvidaste darle ese primer param un nombre, la grilla lo hará ya que coincide con tu código.


la cuadrícula no está presente en el alcance de los recuentos no recurrentes.

Haga que la grilla sea una matriz global, o pasela como un parámetro a la función.


¿Qué pasa?

La definición de "recuentos no recursivos" no tiene ningún parámetro llamado grilla. Debe pasar el tipo Y el nombre de la variable a la función. Solo pasaste el tipo.

Tenga en cuenta que si utiliza la cuadrícula de nombre para el parámetro, ese nombre no tiene nada que ver con su declaración de grilla main (). Podrías haber usado cualquier otro nombre también.

*** Tampoco puedes pasar matrices como valores.

Como arreglar:

La manera más fácil de arreglar esto es pasar un puntero a una matriz a la función "celdas de recuento no recursivas".

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

mejor y escriba seguro ->

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

Sobre el alcance:

Una variable creada en la pila sale del alcance cuando se termina el bloque en el que se declara. Un bloqueo es cualquier cosa dentro de una llave de cierre de apertura y coincidencia . Por ejemplo, un if () {}, función () {}, while () {}, ...

Nota: dije variable y no datos. Por ejemplo, puede asignar memoria en el montón y esa información seguirá siendo válida incluso fuera del alcance. Pero la variable que originalmente lo apuntaba saldría del alcance.