2012-03-26 14 views
0

Ich möchte ein StringArray wie folgt zu neu:Wie man einen String [] neu erstellt?

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

gibt es einige falsch: über str = new QString[]?

+3

Wahrscheinlich möchten Sie etwas mehr wie 'std :: vector ' (oder verwenden Sie eine der Qt-Sammlungen). –

+0

Qt hat bereits 'QStringList' als eingebauten typedef; Ich schlage vor, das zu untersuchen. – tmpearce

+0

ja! Ich kenne QStringList, aber ich möchte nur den Mechanismus über C++, wie das zu tun ,, In meinem Speicher kann C++ nicht tun, aber ich vergesse .. Ich bin mir nicht sicher .. Ah .. –

Antwort

3

Sie haben keine Größe für das Array angegeben.

Beachten Sie, dass es spezielle Syntax für den delete Operator ist, wenn auch ein Array zu löschen:

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

Wenn Sie ein dynamisches Array wollen, sollten Sie stattdessen mit STL-Vektor (std::vector<QString> in diesem Fall).

+0

übrigens, Kann es wie Assignment, string [] = {"USA", "CHINA"} initialisiert werden? Danke für Ihre Hilfe. –

+0

@Tu_JianWu In C++ 11 kann es sein: 'QString * arr = new QString [10] {" abc "," def "};' Ob Sie das verwenden können, hängt von Ihrem Compiler ab. – bames53

+1

@ravuya: Das wäre eigentlich nicht korrekt. Das '[]' auf der Deklaration würde "Zeichenfolgen" zu einem Zeiger machen. Die korrekte Deklaration wäre 'QString * strings;'. – Kyle

2
QString* str[]; 

Deklariert ein Array vom Typ QString*. Wenn Sie einen einzelnen String benötigen, was Sie brauchen, ist einfach:

QString* str; 
str = new QString; 

jedoch in der Regel müssen Sie nicht explizit dynamischen Speicher tun zuordnen. QString würde seine eigene Speicherverwaltung bereitstellen.

Wenn Sie eine Sammlung von Zeichenfolgen benötigen, ist es viel besser, eine Container-Klasse wie Vektor zu verwenden.

QVector<QString> str; 
+0

Wenn ich es in QString* str; ändere, gibt es einen falschen: erwarteten primären Ausdruck vor ']' Token, was ich will ist, dass ich einen Punkt habe, der auf eine String-Liste zeigt, wie "USA", "CHINA", "ENGLAND "Wie kann ich das machen? Danke für Hilfe ... –

1

Die Größe muss angegeben werden oder es wird nicht funktionieren.

str = new QString[10]; 
0

Sie wollen wahrscheinlich QStringList

+0

oh, no ,, ich kenne QStringList, aber ich will nur C++ wissen, kann es direkt implementieren, danke für Ihre Hilfe .. –

1

QString* str[] eine Reihe von QString Zeiger erklärt. Ein Zeiger ist mehr oder weniger gleichbedeutend mit einem Array. Wenn Sie nur eine Reihe von QString ‚s wollen, sollten Sie dies tun:

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

Dies wird str Punkt auf ein Array von 10 QStrings machen. Die [] in Ihrer Deklaration ist falsch, es sei denn, Sie möchten ein 2D-Array erstellen. Natürlich, wenn Sie dies tun, denken Sie daran, zu delete [] str; an einem bestimmten Punkt zu erinnern, um Ihren Speicher freizugeben.

Wenn die Größe des Arrays zum Zeitpunkt der Kompilierung bekannt ist, sind Sie besser dran überhaupt keine dynamische Zuweisung mit:

QString str[10]; 
Test() { } 

Dieser Code wird genau die gleiche Arbeit wie es oben der Fall ist, aber Sie kann den Umgang mit den new und delete vermeiden.

Oder, wie andere vorgeschlagen haben, können Sie einfach std::vector<QString> verwenden und die STL damit umgehen lassen.

+0

danke für Ihre Hilfe..Kann es wie Assignment initialisiert werden, string [] = {"USA "," CHINA "},? –

+0

@Tu_JianWu: Ich kenne Qt nicht, aber ich verstehe nicht, warum Sie das nicht können. Sie können dies jedoch nur innerhalb einer Funktion tun. Dies: 'class Test {QString str [] = {" USA "," CHINA "}; Test() {}}; 'ist vom C++ - Standard nicht erlaubt, es sei denn, Sie verwenden C++ 11. – Kyle

Verwandte Themen