2012-03-26 38 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

相关问题