Warum kann ich keine Schnur streicheln?

Warum kann ich string nicht so cout :

 string text ; text = WordList[i].substr(0,20) ; cout << "String is : " << text << endl ; 

Wenn ich dies tue, erhalte ich den folgenden Fehler:

Fehler 2 Fehler C2679: binär ‘<<': kein Operator gefunden, der einen rechten Operanden vom Typ 'std :: string' verwendet (oder es gibt keine akzeptable Konvertierung) c: \ users \ mollasadra \ documents \ visual studio 2008 \ projekte \ barnamec \ barnamec \ barnamec.cpp 67 barnamec **

Es ist erstaunlich, dass selbst das nicht funktioniert:

 string text ; text = "hello" ; cout << "String is : " << text << endl ; 

Sie müssen einschließen

 #include  #include  

Sie müssen irgendwie auf den Namespace std des Couts verweisen. Zum Beispiel einfügen

 using std::cout; using std::endl; 

über Ihrer functionsdefinition oder der Datei.

Es gibt mehrere Probleme mit Ihrem Code:

  1. WordList ist nirgendwo definiert. Sie sollten es definieren, bevor Sie es verwenden.
  2. Sie können nicht einfach Code außerhalb einer function wie diesem schreiben. Sie müssen es in eine function bringen.
  3. Sie müssen #include bevor Sie die String-class und den Iostream verwenden können, bevor Sie cout oder endl .
  4. string , cout und endl im std Namespace, so dass Sie nicht auf sie zugreifen können, ohne sie mit std:: sei denn, Sie verwenden die using Direktive, um sie zuerst in den Geltungsbereich zu bringen.

Die obigen Antworten sind gut, aber wenn Sie kein String-Include hinzufügen möchten, können Sie Folgendes verwenden

 ostream& operator< <(ostream& os, string& msg) { os< 

Sie müssen nicht explizit auf std::cout oder std::endl verweisen.
Sie sind beide im namespace std . using namespace std anstelle von Scope-Resolution-Operator :: jedes Mal ist es einfacher und sauberer.

 #include #include using namespace std; 

Wenn Sie Linux-System verwenden, müssen Sie hinzufügen

using namespace std;

Unter Kopfzeilen

Wenn Windows dann stellen Sie sicher, dass Sie Header richtig #include

#include

Verweisen Sie darauf, es funktioniert perfekt.

 #include  #include  int main () { std::string str="We think in generalities, but we live in details."; // (quoting Alfred N. Whitehead) std::string str2 = str.substr (3,5); // "think" std::size_t pos = str.find("live"); // position of "live" in str std::string str3 = str.substr (pos); // get from "live" to the end std::cout < < str2 << ' ' << str3 << '\n'; return 0; }