81

Ich weiß, es ist ein häufiges Problem, aber auf der Suche nach Referenzen und anderen Materialien finde ich keine klare Antwort auf diese Frage.Verketten von Strings funktioniert nicht wie erwartet

Betrachten Sie den folgenden Code ein:

#include <string> 

// ... 
// in a method 
std::string a = "Hello "; 
std::string b = "World"; 
std::string c = a + b; 

Der Compiler sagt mir es kann nicht einen überladenen Operator für char[dim] finden.

Bedeutet das, dass es in der Zeichenfolge keinen Operator + gibt?

Aber in mehreren Beispielen gibt es eine Situation wie diese. Wenn dies nicht der richtige Weg ist, um mehr Zeichenfolgen zu erstellen, was ist der beste Weg?

+15

sollte Ihr Code kompilieren ganz gut, was bedeutet, du bist nicht zeigt den genauen Code an, der den Fehler verursacht (zusätzlich zu der genauen Fehlermeldung). – sbi

+0

Nun, es funktioniert nicht ... Wahrscheinlich ist meine Schuld, dass ich Compiler nicht zur Verfügung gestellt habe ... es ist g ++ nicht vc ... :) – Andry

Antwort

150

Ihr Code, wie geschrieben, funktioniert. Sie versuchen, wahrscheinlich etwas in keinem Zusammenhang zu erreichen, aber ähnlich:

std::string c = "hello" + "world"; 

Dies funktioniert nicht, weil für C++ dies scheint, wie Sie versuchen, zwei char Zeiger hinzuzufügen. Stattdessen müssen Sie mindestens eines der char* Literale in eine std::string konvertieren. Entweder können Sie tun, was Sie bereits in der Frage gestellt haben (wie gesagt, diesen Code wird Arbeit) oder Sie wie folgt vor:

std::string c = std::string("hello") + "world"; 
+0

Ja, ich werde es jetzt versuchen ... – Andry

+0

Vielen Dank ... ok, es funktioniert ... Ich dachte, das war das Problem ... aber wirklich .... Es gibt keinen gut bereitgestellten Operator zu concat zwei Saiten (ich meine zwei char *) ????? das ist wirklich seltsam ... Gibt es einen Grund, warum Standard-Bibliotheken solch eine einfache Sache nicht unterstützen (ich denke, es muss einen geben). – Andry

+3

char * ist ein Zeiger und kann nicht einfach hinzugefügt werden, da eine Speicherzuweisung erforderlich ist. std :: strings verstecken die Zuweisung, deshalb ist es möglich, einen Operator + für sie bereitzustellen. –

46
std::string a = "Hello "; 
a += "World"; 
+2

Wäre +1, wenn ich Upvotes übrig hätte! – jwueller

+0

Sorry sein C++ nicht C# ich + = funktioniert hier nicht, für die es verwendet wird – Pratik

+17

@Pratik [Sie sicher?] (Http://en.cppreference.com/w/cpp/string/basic_string/operator%2B % 3D) – Fraser

5

Ich würde dies tun:

std::string a("Hello "); 
std::string b("World"); 
std::string c = a + b; 

, die in VS2008 kompiliert.

+0

Entschuldigung ... Ich habe g ++ keine vc ... – Andry

+1

Sollte auch in gcc funktionieren. –

5
std::string a = "Hello "; 
std::string b = "World "; 
std::string c = a; 
c.append(b);