2009-10-27 7 views
22

No confunda con el título como estaba ya preguntó por alguien, pero para un contexto diferenteerror C2679: binario '>>': no ​​se encontró operador que tome un operando de la derecha del tipo 'std :: string' (o no hay una conversión aceptable)

El siguiente código en Visual C++ Compiler (VS2008) no recibe compila, sino que lanza esta excepción:

std::ifstream input (fileName); 

while (input) { 
    string s; 
    input >> s; 
    cout << s << endl; 
}; 

pero este código compila bien en cygwin g ++ . ¿Alguna idea?

+1

Publica la fuente completa. – dirkgently

Respuesta

56

¿Ha incluido todos los siguientes encabezados?

  • <fstream>
  • <istream>
  • <iostream>
  • <string>

Mi conjetura es que se olvidó <string>.

En una nota al margen: Eso debería ser std::cout y std::endl.

+1

Tienes razón ... Eché de menos , ¿no crees que este mensaje de error es totalmente engañoso? No puedo relacionar este mensaje de error con la corrección que se menciona. ¡¡Muy extraño!! – asyncwait

+5

@Vadi: muy probablemente 'std :: string' se define en algún otro encabezado que ya haya incluido, pero el operador no lo está. Entonces el compilador acepta 'string s;', pero no la invocación del operador de flujo. – sbi

+0

No tiene que especificar 'std :: cout'. Si ejecuta 'using namespace std;', entonces simplemente 'cout' es suficiente. –

0

Agregando a @sbi respuesta, en mi caso, la diferencia fue incluido <string> en lugar de <string.h> (bajo VS 2017).

Ver la siguiente respuesta: similar case answer

espero que ayude.

Cheers,

Guy.

Cuestiones relacionadas