2013-10-12 49 views
2

在一個類中,我想創建一個數組(預定義,因爲它在一個頭類中),沒有指定任何邊界,直到類有一個用它的類型創建的對象。 例如:預定義的無邊界二維數組?

class RandomClass{ 
public: 
    int myarray[][];//Remember this is a 2D array, 1D arrays can be defined like this. 
} 

(這個類是不完整的,我知道,只是假裝它不是) 顯然,這並不工作,因爲「我不能沒有界定其邊界創建數組」

所以我的問題是,我該怎麼做? 或者,也許,我該如何創建一個數組的內部構造函數,將公開訪問該類的成員的類。

有關我爲什麼要這樣做的一點信息; 我想創建一個處理2D遊戲地圖的類,當創建類時,它會通過構造函數的參數給出地圖的大小,然後創建數組,以便它不需要任何大於地圖本身的大小。 我知道我可以使用矢量,但是我很難讓它們變成2維。 (如果你回答我的問題,請首先回答主要問題,不要告訴我如何在這種情況下使用矢量 - 但它也會有幫助)

我會發布錯誤,雖然沒有'很多原因。

error: declaration of 'myarray' as multidimensional array must have bounds for all dimensions except the first

回答

4

回答第一個問題是

int** myarray; 

然後在你的構造

RandomClass(int rows, int cols) 
{ 
    myarray = new int*[rows]; 
    for (int i = 0; i < rows; ++i) 
     myarray[i] = new int[cols]; 
} 

回答第二個問題是

vector< vector<int> > myvector; 

二維矢量只需一個矢量矢量,然後輸入你的構造函數

RandomClass(int rows, int cols) : myvector(rows, vector<int>(cols)) 
{ 
} 
+0

我甚至會建議使用單個向量,如果真的需要一個n * m二維數組。 – juanchopanza

+0

謝謝。 但是你能否解釋一下'int ** myarray'是什麼意思?是, 我是新手,所以我認爲當我看到'指針' – killerloader

+0

這是一個指針,它是一個指針指針,換句話說是一個雙指針。在C++中,您可以擁有數組數組,向量向量和指向指針的指針。如果你是谷歌2D動態數組(或者其他),你可能會找到一些解釋這個概念的東西,圖表會有所幫助。 – john