¿Por qué no puedo tocar una cuerda?

Por qué no puedo cout string como esta:

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

Cuando hago esto, aparece el siguiente error:

Error 2 error C2679: binario ‘<<': no ​​se encontró operador que tome un operando de la derecha del tipo 'std :: string' (o no hay una conversión aceptable) c: \ users \ mollasadra \ documents \ visual studio 2008 \ proyectos \ barnamec \ barnamec \ barnamec.cpp 67 barnamec **

Es sorprendente que incluso esto no funcione:

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

Debes incluir

 #include  #include  

Necesitas hacer referencia al std del espacio de nombres de Cout de alguna manera. Por ejemplo, insertar

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

encima de la definición de su función, o el archivo.

Hay varios problemas con su código:

  1. WordList no está definido en ninguna parte. Debe definirlo antes de usarlo.
  2. No puedes simplemente escribir código fuera de una función como esta. Necesitas ponerlo en una función.
  3. Necesita #include antes de poder usar la clase de cadena y iostream antes de usar cout o endl .
  4. string , cout y endl viven en el std nombres endl , por lo que no puede acceder a ellos sin agregarles prefijo std:: menos que use la directiva using para ponerlos primero en el scope.

Las respuestas anteriores son buenas, pero si no desea agregar cadenas, puede usar las siguientes

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

No es necesario que haga referencia explícitamente a std::cout o std::endl .
Ambos están incluidos en el namespace std . using namespace std lugar de utilizar el operador de resolución de ámbito :: cada vez que hace es más fácil y más limpio.

 #include #include using namespace std; 

Si está utilizando el sistema de Linux, entonces necesita agregar

using namespace std;

Debajo de los encabezados

Si tiene ventanas, asegúrese de colocar los encabezados correctamente #include

#include

Refiere esto funciona perfectamente.

 #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; }