2011-04-02 35 views
0

編輯#1 所以我認爲我的解決方案是通過函數傳遞類,然後我必須獲取大小值在主要並將它們傳遞到類。那麼,如何基於2個int值在類中創建一個多維數組?這是我,但我得到的錯誤「'二」不能出現在一個常數表達式」全局變量和多維數組主外C++

class tempHolder{ 
    public: 
    bool C1[col1][row1]; 

    tempHolder(){ 
    } 

    tempHolder(int i, int ii){    
    int* C1 = new bool[i][ii]; 
    } 
} 

所以我的程序有一個多維數組,但我使用全局變量(我知道是不好的風格)來聲明數組的大小。問題是,我也通過這個陣列功能,我用它在一個類中,如下面的代碼...

#include <iostream> 
using namespace std; 
const int row1 = 12; 
const int col1 = 32; 
class tempHolder{ 
     public: 
     bool C1[col1][row1]; 
     void operator=(bool C2[col1][row1]){ 
       for(int i=0;i<row1;i++) 
        for(int ii=0;ii<col1;ii++) 
        C1[i][ii] = C2[i][ii]; 
     } 
}; 
void printTable(bool CC[][row1], int, bool); 

int main(int argc, char *argv[]) { 
    col1=5; //error 
    bool C1[col1][row1]; 

所以我希望能夠在改變ROW1和COL1正確的價值觀main的開頭,然後它將改變整個程序的數組大小。如果我像上面那樣聲明全局變量,那麼程序會編譯,但由於它們是常量,我將無法更改它們。我無法使用#define,因爲它們根本無法更改。那麼我能做些什麼來調整整個程序的數組大小呢?

+0

您可以使用'new'和'delete'的動態分配來改變數組的大小。或者更好的是,只需使用std :: vector作爲多維數組而不是原始數組。 – greatwolf 2011-04-02 03:53:18

回答

0

在編譯程序時,數組的大小設置爲之前main開始。

因此,即使col1只在啓動時更改一次,它仍然必須是適當的非const變量。

您可能想要std::vector實現一個可變大小的數組。請注意,vector<bool>是一個經過特別優化的類,每個布爾值使用一位而不是一個字節。如果出現問題或性能較差,您可以嘗試使用vector<char>

#include <iostream> 
using namespace std; 

int row1 = 12; 
int col1 = 32; 

typedef vector< vector<bool> > bit_array_2d; 

class tempHolder{ 
     public: 
     bit_array_2d C1; 
     void operator=(bit_array_2d const &C2){ 
      C1 = C2; 
     } 
}; 

int main(int argc, char *argv[]) { 
    col1=5; // OK 
    bit_array_2d C1(col1, vector<bool>(row1)); 

更高級的方法,如果只有少數可能的大小可供選擇,則使用模板參數化C數組。

0

不能簡單地通過在運行時更改維度來更改數組的大小 - 您需要動態地使用新分配內存。最好的是通常使用STL容器 - 它們的長度屬性是內置的,並且可以輕鬆調整大小。