2012-10-15 558 views
0

簡單的一行代碼無法編譯,出了什麼問題?二維數組未正確初始化

char *words[256] = new char[numOfWords][256]; 

array must be initialized with a brace-enclosed initializer 
+0

'words'不是一個二維數組,而是一個256個char *數組。作爲C++,爲什麼不使用'std :: vector '或者'std :: array <256,std :: string>'? – hmjd

+0

我想用numOfWords char [256]的數組,我是這樣做倒退?試圖在沒有任何stl的情況下這樣做 – MasterGberry

+0

這個問題需要更多的上下文,即代碼片段來解釋可能會有用。你想要一個numOfWords數組嗎?但是你似乎正在聲明一個256個元素的數組? – bobestm

回答

3

您聲明瞭一個指向char的256個指針的數組。錯誤消息很明顯 - 數組需要使用大括號初始化程序進行初始化。所以,如果你想保持你的聲明,這樣做:

char* words[256] = { new char[wordlength], ... }; 
     // ^^^ this is effectively your numOfWords 

或者,您也可以完全離開了初始化,後來分配單獨的元素,例如在一個循環。請注意,如果您動態分配元素,您也有責任正確刪除它們。

如果你想有一個指針指向256個char小號數組,數組那麼這個:

char (*words)[256] = new char[numOfWords][256]; 
+0

或者:char * words [256] = {new char [numOfWords]}; –

+0

@Xploit可能是,但上面的OP的評論暗示了另外一點,IMO。 – jrok

+0

謝謝!作品!我的反向詞功能現在是成功的:) – MasterGberry

0

當你聲明一個二維數組,把它當做只是指向其他數組的數組。因此,要做你在問什麼:

char *words[] = new char*[256]; 
for (int i = 0; i < 256; ++i) { 
    words[i] = new char[numOfWords]; 
}