error C2679: binario '> >' : no se encontró ningún operador que tome un operando a la derecha del tipo 'std :: string' (o no hay una conversión aceptable)
-
06-07-2019 - |
Pregunta
Por favor, no confunda con el título, ya que alguien ya lo solicitó, sino para un contexto diferente
El código siguiente en el compilador de Visual C ++ (VS2008) no se compila, sino que genera esta excepción:
std::ifstream input (fileName);
while (input) {
string s;
input >> s;
std::cout << s << std::endl;
};
Pero este código se compila bien en cygwin g ++. ¿Algún pensamiento?
Solución
¿Ha incluido todos los siguientes encabezados?
<fstream>
<istream>
<iostream>
<string>
Supongo que olvidó < string >
.
En una nota al margen: eso debería ser std :: cout
y std :: endl
.
Otros consejos
Agregando a @sbi respuesta, en mi caso la diferencia fue incluir < string >
en lugar de < string. h >
(en VS 2017).
Consulte la siguiente respuesta: respuesta de caso similar
incluye < string >
Intente incluir el archivo de encabezado de cadena junto con el archivo < iostream >
.
Funcionará en algunos compiladores incluso sin el < string >
porque las configuraciones para diferentes compiladores son diferentes y es el compilador el responsable de leer los archivos del preprocesador que comienzan con el símbolo '#' para generar un archivo obj.
Además de lo que otros dijeron. El siguiente código fue necesario en mi aplicación para compilar con éxito.
std::cout << s.c_str() << std::endl;
Otra solución a esto es ir a las propiedades del proyecto - > General - > Conjunto de caracteres y elija " Conjunto de caracteres Ues Multi-Byte " (No necesitará usar c_str () para generar la cadena)
Hay desventajas en el uso de MBCS, por lo que si planea localizar su software, le aconsejaría que no lo haga.