簡體   English   中英

'='標記之前的預期構造函數,析構函數或類型轉換”

[英]Expected constructor, destructor, or type conversion before '=' token"

int sizex = 3;
int sizey = 3;
int * grid;
grid = new int [sizex][sizey];  // Line 6
grid = {{0}};

我試圖在這里聲明一個數組,但是編譯器說

第6行:錯誤:“ =”令牌之前的預期構造函數,析構函數或類型轉換

你能幫我弄清楚為什么嗎?

因為語法錯誤。 那不是您分配內存的方式。

如果需要矩陣,則可能需要

int** grid;

然后分配內存,如下所示:

grid = new int*[sizex];
for ( int i = 0 ; i < sizex ; i++ )
   grid[i] = new int[sizey];

另外,分配grid = {{0}}; 在為grid分配內存之后,並沒有什么意義。

不要忘記刪除內存。

正如Luchian和Mark B所述,使用new創建2D數組是不正確的。

如果要初始化所有元素,請使用以下構造:

grid = new int*[sizex];
for (int i = 0 ; i < sizex ; i++)
   grid[i] = new int[sizey]();
                         //^^

這會將元素初始化為零。

您不能使用:

grid = {{0}};

用於分配: {}僅可在初始化時使用。

您不能使用該語法在C ++中直接創建2d數組。 雖然您可以使用注釋中指出的有些晦澀的語法( int (*p)[6] = new int[3][6]; ),但我不建議這樣做,因為這可能會使您的代碼過於復雜。

相反,您想要的是向量的向量。 有效地使用向量會使您的內存管理變得萬無一失,因為C ++不會被垃圾收集。

std::vector<std::vector<int> > grid(sizex, std::vector<int>(sizey));

    int main(){
      int** grid;
      int sizex = 5;
      int sizey = 5;
      grid = new int*[sizex];
      for ( int i = 0 ; i < sizex ; i++ )
         grid[i] = new int[sizey];

// ... a lot of code 

// .. deleting:
      for ( int i = 0 ; i < sizex ; i++ )
             delete [] grid[i];
       delete [] grid; 
    }

暫無
暫無

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

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