![](/img/trans.png)
[英]expected constructor, destructor, or type conversion before ‘*’ token
[英]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.