2012-03-26 31 views
0

我想新一StringArray如下:如何新建一個字符串[]?

class Test 
{ 
public: 
    QString* str[]; 
    Test() { 
     str = new QString[]; 
    } 
}; 

是有一些錯誤:約str = new QString[]

+3

很可能你真的想要更像'std :: vector '(或使用Qt的一個集合)。 – 2012-03-26 05:03:48

+0

Qt已經將'QStringList'作爲內置的typedef;我建議調查一下。 – tmpearce 2012-03-26 05:07:22

+0

是啊!我知道QStringList,但我只是想關於C++的機制如何做到這一點,在我的記憶中,C++不能做到這一點,但我忘了..我不知道..阿哈.. – 2012-03-26 05:12:51

回答

3

您沒有爲數組指定大小。

注意,沒有爲delete運營商特殊的語法刪除陣列時,還有:

QString* strings; 
strings = new QString[10]; 
delete[] strings; 

如果你想有一個動態數組,可以考慮使用STL向量(std::vector<QString>在這種情況下)來代替。

+0

順便說一句,它可以像Assignment,string [] = {「USA」,「CHINA」},?感謝您的幫助.. – 2012-03-26 05:22:14

+0

@Tu_JianWu在C++ 11中,它可以是:'QString * arr = new QString [10] {「abc」,「def」};'您是否可以使用它取決於您的編譯器。 – bames53 2012-03-26 06:15:26

+1

@ravuya:那實際上是不正確的。聲明中的'[]'會使'strings'成爲指針的指針。正確的聲明是'QString * strings;'。 – Kyle 2012-03-26 18:01:02

2
QString* str[]; 

聲明類型爲QString*的數組。如果您需要單個字符串,您只需:

QString* str; 
str = new QString; 

但是,通常您不需要明確地分配動態內存。 QString將提供自己的內存管理。

如果你需要一個字符串集合,你最好使用像vector這樣的容器類。

QVector<QString> str; 
+0

如果我將其更改爲QString* str;,則存在錯誤:在']'標記之前的預期主表達式,我想要的是我有一個指向字符串列表的點,如「USA」,「CHINA」,「ENGLAND 「那麼,我該怎麼辦?感謝您的幫助... – 2012-03-26 05:07:49

1

尺寸必須指定,否則不起作用。

str = new QString[10]; 
0

你可能想QStringList

+0

哦,不,我知道QStringList,但我只是想知道C++是否可以直接實現它,謝謝你的幫助.. – 2012-03-26 05:16:56

1

QString* str[]聲明的QString指針數組。指針或多或少與數組同義。如果你只是想QString的數組,你應該這樣做:

QString* str; 
Test() { 
    str = new QString[10]; 
} 

這將使str點到10 QStrings的數組。除非你想製作二維數組,否則聲明中的[]是不正確的。當然,如果你這樣做,一定要記住delete [] str;以釋放你的記憶。

如果數組的大小在編譯時是已知的,你過不使用任何動態分配的要好:

QString str[10]; 
Test() { } 

此代碼將工作完全一樣的,因爲它上面,但你可以避免處理newdelete。或者,正如其他人所建議的那樣,您可以使用std::vector<QString>並讓STL處理它。

+0

感謝您的幫助......可以初始化爲Assignment,string [] = {「USA 「,」中國「},? – 2012-03-26 05:30:52

+0

@Tu_JianWu:我對Qt並不熟悉,但我不明白爲什麼你不能這樣做。但是,你只能在一個函數內完成它。這個:'class Test {QString str [] = {「USA」,「CHINA」}; Test(){}};'除非您使用C++ 11,否則C++標準不允許。 – Kyle 2012-03-26 05:52:22

相關問題