2011-06-09 76 views
0

Possible Duplicate:
C++ multi dimensional arrayC++:字符串

我試圖創建一個用於創建基於的對象構造函數的參數字符串一個一個任意大小的數組的一類新的多維數組。

這裏,對象的構造我想到目前爲止代碼:

commandSpec::commandSpec(int numberOfCommands) 
{ 
    std::string * commands = new std::string[3][numberOfCommands]; 
} 

我得到一個錯誤:「numberOfCommands不能出現在常量表達式」,可能有人告訴我正確的方式來指定一個對象中的數組,我不知道直到執行的大小。

感謝,J

+0

上帝(或者是它斯特勞斯?)創建的'VECTOR'。 – 2011-06-09 12:20:58

+0

所以是不好的形式對這樣的堆添加的陣列(如果我修復語法)?我認爲,作爲後的尺寸變化不會創建它我wouldnt需要一個載體會給我featres,我只需要一個簡單的數組,多數民衆贊成規模將在運行時被定義,但它在定義時將仍然是固定的。 – 2011-06-09 12:33:07

回答

2

這或許應該被實現爲一個結構,一個載體,就像這樣:

struct command { 
    std::string first; 
    std::string second; 
    std::string third; 
}; 

commandSpec::commandSpec(int numberOfCommands) 
{ 
    std::vector<command> commands(numberOfCommands); 
} 

當然,你應該選擇適當的名稱爲command成員。

0

反轉維度的順序...

commandSpec::commandSpec(int numberOfCommands) 
{ 
    std::string (*commands)[3] = new std::string[numberOfCommands][3]; 
} 

不過,我強烈建議你考慮使用向量代替。

+0

這不起作用。這不僅僅是C++如何處理數組。 – Beta 2011-06-09 12:23:32

+0

@Beta:抱歉,忘了LHS陣列部分;這應該現在工作。 – 2011-06-09 13:01:40

0

我會用一個std ::矢量代替,使生活更容易:在堆中分配時

commandSpec::commandSpec(int numberOfCommands) 
{ 
    std::vector<std::vector<std::string>> mystrings(numberOfCommands); 
} 
+0

我認爲你在錯誤的順序維度。它應該是3,然後是numberOfCommands。 – Beta 2011-06-09 12:25:11

1

可變長度數組只允許。

您需要分兩步分配數組 - 首先分配長度爲3(來自指針)的數組,然後遍歷3個元素併爲每個元素分配新的字符串。

我建議你使用std::vector代替。