C++, Wie die Anzeige/print ein string-Objekt? cout << int funktioniert, cout << string nicht
Ich lief in ein Problem von google nicht lösen konnte. Warum ist, dass cout arbeitet für ein int-Objekt, aber nicht ein string-Objekt in dem folgenden Programm?
#include<iostream>
using namespace std;
class MyClass {
string val;
public:
//Normal constructor.
MyClass(string i) {
val= i;
cout << "Inside normal constructor\n";
}
//Copy constructor
MyClass(const MyClass &o) {
val = o.val;
cout << "Inside copy constructor.\n";
}
string getval() {return val; }
};
void display(MyClass ob)
{
cout << ob.getval() << endl; //works for int but not strings
}
int main()
{
MyClass a("Hello");
display(a);
return 0;
}
- Was meinst du mit "funktioniert"? Warum lassen Sie nicht
getval()
const? - Für mich funktioniert. Was ist Ihre
seen
Ausgang undexpected
Ausgabe. In welcher Weise sollte Sie anders sein. - Awesome name btw.
- Carnegie Dank!
Du musst angemeldet sein, um einen Kommentar abzugeben.
Müssen Sie die
string
header zu bekommen, die überlastetoperator<<
.Vielleicht möchtest du ja auch zurückgeben
const string&
statt einerstring
ausgetval
ändern Sie den Konstruktor zu akzeptierenconst string&
statt einerstring
, und ändern Siedisplay
zu akzeptierenconst MyClass& ob
zu vermeiden unnötig zu kopieren.const T&
wenn ich will nicht eine Kopie machen und ich will nicht zu ändern, das äußere Objekt, von innerhalb der Funktion. Dies macht Ihre Absichten klar und beseitigt die Möglichkeit der compiler Dummheit. Es hält Sie auch aus versehen Dinge tun, die Sie nie gedacht, zu tun (wie das ändern der parameter in der Funktion, die der compiler nicht elidiert).iostream
Bibliothek ist unabhängig von derstring
Bibliothek soiostream
weiß nicht, nichts über es; d.h.iostream
weiß nichts überstring
aberstring
kenntiostream
, so ist es derjenige, zu definieren, wie sich mit einemostream
.Ich weiß nicht, was für Sie arbeitet, oder wenn Sie behoben haben, aber ich einfach war die Arbeit an diesem... für Ihre cout Sie müssen die Zeile wie cout << "insert-Zeichenfolge hier" << endl; Du bist nicht, den zweiten << nach der Zeichenfolge. Hoffe, das hilft!