2013-06-02 133 views
1

基本上我想創建一個使用傳遞給我的類的大小變量的多維數組,但我不知道該怎麼做。使用指針創建一個數組

我試着做

//Class header 
Tile * gameTile; 

//Class cpp 
gameTile = new Tile[size][size]; 

它不介意new Tile[size]但不[size][size]。爲什麼是這樣?

+0

什麼是錯誤? – Djon

+0

表達式必須有一個常數值。香港專業教育學院改變了原型,並且爲const,但沒有:/ – Split

+0

一個維度必須是恆定的,讀這http://stackoverflow.com/questions/936687/how-do-i-declare-a-2d-array-in -c-using-new – Djon

回答

1

像弗拉德的鏈接中提到,您可以使用載體,或一些更快速,你可以使用下面的代碼初始化bidimentional陣列:

int i; 
int ** intTile; 
intTile = new int*[5]; 

for (i = 0; i < 5; i++) { 
    intTile[i] = new int[5]; 
} 
+0

編寫代碼的速度並不比矢量矢量更快,而且比專門的矩陣類運行速度更快。儘管如此,它在內存管理方面的失敗遠遠超過了兩者。 – chris

4

失敗,因爲只有一個第一維分配的數組可能具有動態大小。爲了克服這個限制,你可以使用一個2維向量:

std::vector<std::vector<Tile> > gameTile(size, std::vector<Tile>(size)); 
+0

我該如何在類頭中聲明?如何根據傳遞給init函數的參數來改變它的大小? – Split

+0

@Split好矢量具有['調整大小()'](http://en.cppreference.com/w/cpp/container/vector/resize)成員函數,所以可以使用它。 – 0x499602D2

+0

至於類頭 - 你打算使用這個?主要內部,一個班級? – 0x499602D2

0

,你可以爲你的MULTY維數組gameTile的第一個元素做

Tile *gameTile = &((new Tile[size][size])[0][0]); 

這家店的地址。

+0

'新的瓷磚使用此[大小] [SIZE]'是不是有效的C++ – kotlomoy

+0

@kotlomoy它正常工作對我來說,你是說,你不能初始化使用「尺寸」的數組? –

+0

只有'size'是恆定的,你纔可以。 – kotlomoy

0

雖然要使用二維數組,我只是想指出的完整性,您也可以使用一個維數組,你的目的。如果尺寸按尺寸分類,您有:

gameTile = new Tile[size*size]; 
//now gameTile[y][x] becomes: 
Tile t = gameTile[x + y*size]; 

//if array is not square 
gameTile = new Tile[width*height]; 
//now gameTile[y][x] becomes: 
Tile t = gameTile[x + y*width];