Probleme mit Strings zusammensetzen
-
Hallo,
ich wollte einen String wie folgt aufbauen:std::string a = b + " etwas " + c + " nochwas"...; //wobei b, c auch std::string sind
Dann kam die Fehlermeldung "error C2679: Binärer Operator '+': Es konnte kein Operator gefunden werden, der einen rechtsseitigen Operanden vom Typ 'std::string' akzeptiert (oder keine geeignete Konvertierung möglich)"
Wenn ich es so mache
std::string a = b + " etwas "; a+= c; a+= " nochwas " a+= ...
funktioniert es.
aber das ergibt so viel Code, der eigentlich unnötig ist. Wie kann ich die erste Variante zum Laufen bekommen?
Danke
-
Benutze Memberfunktionen, die auf die String-Klasse zugeschnitten sind, z.B. append().
http://www.cplusplus.com/reference/string/string/
-
Folgende Zeile kompiliert einwandfrei:
std::string a = b + " etwas " + c + " nochwas";
Es scheint also an dem ... zu liegen und genau diesen Teil verschweist du uns. Man kann also nur raten.
Vielleicht kannst du das problem lösen indem du folgendes schreibst:std::string a = b + " etwas " + c + " nochwas" + std::string(...);
Alternativ kann ich dir ein std::stringstream empfehlen.
-
Steht das so im Code, mit dem ... außerhalb der ""?
<string> ist inkludiert? Einiges aber nicht alles klappt manchmal auch ohne Inkludieren.
-
... steht natürlich in echt nicht dort
und <string> habe ich includiert.... heißt nur, dass es noch mehr Strings gibt, die aneinander gereiht werden.
Es werden mehrere strings als Parameter einer Methode übergeben.
Diese werden dann (für eine URL) zusammengebaut, in der Form:std::string url = "www.irgendwas.de/index.htm?para1=" + a + "para2=" + b;
-
Dann zeig Mal deinen Originalcode.
-
und <string> habe ich includiert.
Dem wage ich zu widersprechen. Prüf das lieber noch mal.
-
Hallo,
also ich habe es noch mal geprüft wegen dem include-Befehl. Ja der ist vorhanden.
Der include findet allerdings in der header-Datei statt, da ich ihn ja bereits für Übergabeparameter brauche.viel muss zu der Beispielszeile von oben nicht mehr hinzugefügt werden, damit es dem entspricht wie es im original ist:
void Klasse::methode(std::string& a, std::string& b, std::string& c) { std::string url = "www.irgendwas.de/index.htm?para1=" + a + "para2=" + b + "para3=" + c; ... }
Fehler tritt bereits bei der Zeile mit url = auf.
-
Und wenn Du using namespace std verwendest?
-
Poste bitte compilierbaren Code (zumindest so weit compilierbar, dass er im Compiler genau deinen Fehler erzeugt).
Nimm dazu deine Funktion und kürze alles unwesentliche raus. Das was du gepostet hast compiliert wunderbar:#include <string> void methode(std::string& a, std::string& b, std::string& c) { std::string url = "www.irgendwas.de/index.htm?para1=" + a + "para2=" + b + "para3=" + c; } int main() { using std::string; string a("a"), b("b"), c("c"); methode(a,b,c); }
-
Außerdem nehme ich an, dass du die std::strings nicht per Referenz, sondern per const-Referenz übergeben möchtest.
-
ja, const-Referenz sollte es sein. Habe es testweise mal rausgenommen, obs ohne const geht.
Gibt es eigentlich technisch gesehen einen unterschied ob mit const? Ja, man darf es dann nich verändern aber ich sehe es bis jetzt nur als Sicherheit für den Aufrufer an, dass er sich darauf verlassen kann. Gibt es da aber noch weiter unterschiede?