C++ Concating Streicher Ergebnis "ungültige Operanden der Typen" const char* " und "const char"
Ich möchte concat-zwei strings, aber ich bekomme Fehler, dass ich nicht verstehe, wie zur überwindung dieser Fehler.
Gibt es eine Möglichkeit zur Konvertierung const char* zu char? Sollte ich einige dereferenzieren?
../src/main.cpp:38: error: invalid operands of types ‘const char*’ and ‘const char [2]’ to binary ‘operator+’
make: *** [src/main.o] Error 1
Jedoch, wenn ich versuche zu machen, bis "unten" string diese Weise funktioniert es:
bottom += "| ";
bottom += tmp[j];
bottom += " ";
Hier ist der code.
#include <iostream>
#include <fstream>
#include <vector>
#include <string>
#include <iterator>
#include <sstream>
int main(int argc, char* argv[]) {
ifstream file("file.txt");
vector<string> mapa;
string line, top, bottom;
while(getline(file,line)){
mapa.push_back(line);
}
string tmp;
for(int i = 0; i < mapa.size(); i++)
{
tmp = mapa[i];
for(int j = 0; j < tmp.size(); j++)
{
if(tmp[j] != ' ')
{
top += "+---";
bottom += "| " + tmp[j] + " ";
} else {
}
}
cout << top << endl;
cout << bottom << endl;
}
return 0;
}
bottom += "| " + tmp[j] " ";
zu bottom += "| " + tmp[j] + " ";
Oh, sorry, das habe ich mir kopiert. Nein, es ist sogar, wenn ich es beheben.
InformationsquelleAutor booka | 2013-04-03
Du musst angemeldet sein, um einen Kommentar abzugeben.
Hier:
Sie versuchen, um die Summe einer
char
und einen Zeiger aufchar
. Das wird nicht funktionieren (es wird nicht Ergebnis die Verkettung der Zeichen und die Spitzen string-literal). Und das gleiche gilt, wenn Sie fügen Sie eine+
Zeichen nachtmp[j]
, denn das wird noch evaluiert werden (extra Klammern Hinzugefügt, um zu betonen, die Tatsache, dassoperator +
associates Links):Wenn Sie wollen, um alles in einer Zeile, nur:
Nun, den obigen Ausdruck auf der rechten Seite der Zuweisung wird ausgewertet als:
Seit
operator +
für einestd::string
und einchar
definiert ist, und gibt einestd::string
, das Ergebnis der Auswertung des sub-Ausdruck innerhalb der Klammern wird einestd::string
, die dann summiert, um das string-literal" "
Rückkehr (wieder) einstd::string
.Schließlich, das Ergebnis des gesamten Ausdrucks
(std::string("| ") + tmp[j]) + " "
ist im Eingang zuoperator +=
.operator+
arbeitet von Links nach rechts.Wahr. Aber ich glaube nicht, dass sich auf operator-Assoziativität, um zu bekommen, was Sie wollen, aus der der compiler ist empfehlenswert, vor allem, seit klar ist, dass die OP nicht sehen, warum das wichtig ist...
Ich fügte hinzu, dass gerade für die Klärung der Dinge
"Du versuchst Summe einen char und einen Zeiger auf char. Das wird nicht funktionieren" ja, es wird, es wird der Wert der char auf den Zeiger. Nicht das, was du wolltest, aber ganz legal in C.
Es ist legal, aber wird nicht funktionieren 😉
InformationsquelleAutor Andy Prowl
Sieht, dass Ihr problem ist in dieser Zeile:
Ihnen fehlt ein
+
zwischentmp[j]
und" "
. Versuchen Sie es zu:Edit:
Werden immer noch bewirken, dass eine Zusammenstellung der Fehler, und die, die Sie angegeben w/g++ die folgenden arbeiten und das Ergebnis in einem minimalen temporären Objekten:
konnte Sie sein spezifischer?
Oops, ich vergaß Aufgaben gehen von rechts nach Links, so dass immer noch nicht funktioniert. Sie zu konvertieren, die erste oder zweite ein string.
InformationsquelleAutor Nathan Ernst
Sieht es aus wie Sie fehlt ein + zwischen tmp[j] "und" ". Die Zeile
InformationsquelleAutor Parker Kemp
das problem ist
Ist dies nicht möglich
operator+
ist nicht definiert für char.Jedoch
operator+
definiert ist, für die Zeichenfolge. So dürfen Sie zu tunInformationsquelleAutor
Beachten Sie, dass der compile wertet die ganze Rechte Seite von der equals-Anweisung, und dann Verwendung
string::operator+=
auf , dass.So, der compiler versucht zu bewerten
"| " + tmp[j] + " "
. Was Sie sieht, ist ein c-string, ein char, und ein weiteres c-string. Es gibt keine Möglichkeit, dass der compiler diese in alle Weise, die Sinn macht für das, was Sie zu tun versuchen.Anstatt Sie zu verketten, Stück für Stück, so dass der compiler weiß, suchen Sie in
string
für den Betreiber, die überlastet ist zum verketten von strings, ODER Sie können konvertieren Sie die c-strings in c++ strings, so dass der compiler weiß die c++ - strings:In diesem speziellen Fall, Sie bekommen konnte Weg mit fallen die
string()
um" "
IIRC, aber das ist nicht die schönste Art und Weise, es zu tun.In jedem Fall, gefolgt von einem segment zu einem Zeitpunkt ist die meisten eindeutig zu sagen, der compiler genau, was Sie wollen, und ist die Art, wie Sie sollte es gehen.
Ich würde es mit den 3
+=
Aussagen nur klar zu sein. Nur meine persönliche Präferenz.Danke @Robert ich habe keine Erfahrung, also das ist sehr wertvoll für mich.
InformationsquelleAutor Robert Mason
Diese Linie ist Ihr problem, aber nicht nur für das fehlende '+'.
Hinzufügen
"| "
undtmp[j]
, die erste ist eine "const char[3]" und die zweite ist ein "char". Diese nicht zu etwas nützlich, aber der compiler wandeln Sie Ihren char zu einem int, const char[3], um ein const char * und fügen Sie Sie zusammen. Dann Sie versuchen, fügen Sie einen "const char [2]" const char *, und an diesem Punkt weiß er es nicht versteht - das hinzufügen eines array zu einem Zeiger? Dies ist, was deine Fehlermeldung ist die Berichterstattung - es ist das entdecken dieser "const char *" und "const char [2]" es kann nicht herausfinden, wie Sie zusammen.Logisch, Sie versuchen, erstellen Sie eine Zeichenfolge, die liest,"|? " ein, wo den ? wird ersetzt mit Ihrem tmp[j] Zeichen. Man kann das nicht mit string-Literale verketten, wie du hier tust, jetzt aber. Eine Möglichkeit ist die Verwendung von sprintf, um diese in einen string und hinzufügen, dass nach unten. Eine zweite Lösung ist, um Sie einzeln hinzufügen jeder. Eine Dritte Lösung ist, um zu konvertieren tmp[j], um einen std::string first und hinzufügen, dass - als Zugabe mit einem "+", um einen std::string ist ein definierter Betrieb, der funktioniert.
Kurz gesagt, Sie haben gebissen worden, die von C-legacy-C++ konnte nicht das Problem lösen, ohne zu brechen C-Kompatibilität.
B. Lösung mit sprintf:
InformationsquelleAutor dascandy
weil Sie hinzufügen möchten, ein pointer und ein char, und ein solcher Betrieb ist illegal.
wenn Sie nicht wollen, um es in eine Zeile,du kannst es wie folgt ausprobieren:
string bottom = "";
unten = unten + "| "+ tmp[j] + " ";
diese funktionieren.
InformationsquelleAutor David