簡體   English   中英

C++“未在此范圍內聲明”編譯錯誤

[英]C++ “was not declared in this scope” compile error

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

有誰可以幫我離開這里嗎? 謝謝。

怎么了:

“nonrecursivecountcells”的定義沒有名為 grid 的參數。 您需要將類型 AND 變量名稱傳遞給 function。 你只傳遞了類型。

請注意,如果您使用名稱網格作為參數,則該名稱與您的網格的 main() 聲明無關。 您也可以使用任何其他名稱。

***您也不能將 arrays 作為值傳遞。


怎么修:

解決此問題的簡單方法是將指向數組的指針傳遞給 function “非遞歸計數單元”。

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

更好並且輸入安全->

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

關於scope:

當聲明它的塊終止時,在堆棧上創建的變量來自 scope。 塊是左大括號和匹配右大括號內的任何內容。 例如 if() { }、function() { }、while() {}、...

注意我說的是變量而不是數據。 例如,您可以在堆上分配 memory,即使在 scope 之外,該數據仍將保持有效。 但是最初指向它的變量仍然會來自 scope。

網格不是全局的,它是主 function 的局部。 改變這個:

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

對此:

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

基本上你忘了給第一個參數一個名字,網格會因為它匹配你的代碼。

nonrecursivecountcells() 的第一個參數沒有變量名。 您嘗試在 function 正文中將其引用為網格,因此您可能希望將其稱為網格。

正如編譯器所說, grid沒有在 function 的 scope 中聲明:)“范圍”基本上是指一組花括號。 每個變量都限於聲明它的 scope (不能在該范圍之外訪問)。 在您的情況下,您在main() function 中聲明grid變量並嘗試在nonrecursivecountcells()中使用它。 您似乎將它作為參數傳遞colors但是,所以我建議您只需將您在nonrecursivecountcells()中對grid的使用重命名為colors 我認為嘗試以這種方式傳遞數組也可能有問題,因此您可能應該調查將其作為指針傳遞(除非其他人說相反的話)。

網格在 nonrecursivecountcells 的 scope 上不存在。

要么使網格成為全局數組,要么將其作為參數傳遞給 function。

修復 function 聲明

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM