C++-Kompilierungsfehler "in diesem Bereich nicht deklariert"

Neu in C++. Im folgenden Programm schreibe ich diesen Fehler:

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

Hier ist der Code:

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

Kann mir hier jemand helfen? Danke.

Antwort auf "C++-Kompilierungsfehler "in diesem Bereich nicht deklariert" " 6 von antworten

Was falsch ist:

Die Definition von "nonrecursivecountcells" hat keinen Parameter namens Grid. Sie müssen den Namen der Variablen AND an die Funktion übergeben. Sie haben nur den Typ übergeben.

Hinweis, wenn Sie das Namensraster für den Parameter verwenden, hat dieser Name nichts mit Ihrer main()-Deklaration des Rasters zu tun. Sie hätten auch einen anderen Namen verwenden können.

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


Wie zu beheben:

Der einfache Weg, dies zu beheben ist, einen Zeiger an ein Array an die Funktion "nonrecursivecountcells" zu übergeben.

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

besser und geben Sie sicher ->

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

Über den Bereich:

Eine variable, die auf dem Stapel erstellt wird, kommt aus dem Gültigkeitsbereich, wenn der Block, in dem sie deklariert wird, beendet wird. Ein Block ist alles innerhalb einer öffnenden und übereinstimmenden Schließklammer. Zum Beispiel ein if() , funktion() , while() , ...

Hinweis Ich sagte Variable und nicht Daten. Sie können z. B. Speicher auf dem Heap zuweisen, und diese Daten bleiben auch außerhalb des Bereichs gültig. Aber die Variable, die ursprünglich darauf hinwies, würde immer noch aus dem Anwendungsbereich kommen.

Das

Raster ist im Umfang der nicht rekursiven Zählzellen nicht vorhanden.

Entweder machen Raster ein globales Array, oder übergeben Sie es als Parameter an die Funktion.

Raster ist kein globales, es ist lokal für die Hauptfunktion. Ändern Sie dies:

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

dazu:

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

Grundsätzlich haben Sie vergessen, diesem ersten Param einen Namen zu geben, das Raster wird dies tun, da es mit Ihrem Code übereinstimmt.

Fixfunktionsdeklaration auf

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

Das erste Argument für nonrecursivecountcells() hat keinen Variablennamen. Sie versuchen, es als Raster im Funktionstext zu referenzieren, daher möchten Sie es wahrscheinlich Grid nennen.

Wie der Compiler sagt, wurde 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 nicht im Bereich Ihrer Funktion deklariert :) "Scope" bedeutet im Grunde eine Reihe von geschweiften Klammern. Jede Variable ist auf den Bereich beschränkt, in dem sie deklariert wird (es kann nicht außerhalb dieses Bereichs zugegriffen werden). In Ihrem Fall deklarieren Sie die Variable grid variable in your in Ihrer main() function and trying to use it in Funktion und versuchen, sie in nonrecursivecountcells(). You seem to be passing it as the argument zu verwenden. Sie scheinen es jedoch als Argument colors however, so I suggest you just rename your uses of zu übergeben, daher schlage ich vor, dass Sie ihre Verwendungen von grid in in nonrecursivecountcells() to in 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). umbenennen. Ich denke, es kann etwas falsch sein, wenn Man versucht, das Array auch auf diese Weise zu übergeben, also sollten Sie wahrscheinlich untersuchen, es als Zeiger zu übergeben (es sei denn, jemand anderes sagt etwas zum Gegenteil).