Eclipse se queja: "Sobrecarga no válida de 'endl' '- pero el código se compila

He escrito un operador << para mi clase de plantilla:

template<class T>
std::ostream& operator<<(std::ostream &strm, const MyClass<T> &obj)

y cuando escribo

cout << myClassInstance << endl;

esto se compila y se ejecuta, pero mi CDT de Eclipse dice:

Sobrecarga no válida de 'endl'

¿Por qué me dice eso?

(Yo uso Eclipse CDT Kepler en Win7 64bit con Cygwin gcc)

questionAnswers(8)

para los futuros visitantes, la cosa hizo que el error desapareciera para mí.

std::cout << thing << std::endl

No estoy seguro de por qué Eclipse se queja allí, ya que se compila y funciona bien sin espacios de nombres en ese lugar particular en el código.

Yo también estaba recibiendo este error.

//print the value
cout << rt->element << endl;

Un simple cambio a:

//print the value
cout << rt->element;
cout << endl;

eliminado el error para mí. Nuevo en C ++, pero parece que también necesita sobrecargar << para myClassInstance. Si desea utilizar el método original.

Puedes intentar añadir el comentario.// @suppress("Invalid overload") como en la siguiente línea:

cout << "SOME TEXT" << endl; // @suppress("Invalid overload")

Esto eliminará ese problema y mantendrá la capacidad de detectar otras posibles sobrecargas no válidas en algún lugar del código.

Por cierto, si hace clic en el error en el lado izquierdo del editor, Eclipse lo hará por usted. (Eclipse: Oxígeno).

Sé que esta es una pregunta antigua, pero encontré un problema similar con Eclipse Neon (v4.6.0) en Ubuntu 16.04 LTS

Mi código era:

stringstream l_Buffer;
l_Buffer << "test" << endl;
const char* l_Temp = l_Buffer.str().c_str();

Eclipse reportó 3 errores:

Sobrecarga no válida de 'endl'El método 'c_str' no pudo ser resueltoMétodo 'str' no pudo ser resuelto

Intenté un montón de cosas, reconstruyendo el índice, jugando con la herramienta de análisis de código (configurándolo de la misma manera que mi compilación) y escribiendostd::endl... Todo fue en vano.

Lo que solucionó los tres errores en mi caso fue reemplazando

stringstream l_Buffer;

con:

basic_stringstream<char> l_Buffer;

Nota: Ctrl + clicstringstream te lleva a su definición de typedef eniosfwd.h cual es:

/// Class for @c char mixed input and output memory streams.
typedef basic_stringstream<char>    stringstream;

: endl en lugar de endl o sobrecarga dentro de su clase como miembro:

template<class T>
MyClass<T>& operator<<( std::ostream&(*f)(std::ostream&) ) {
  std::cout << f;
  return *this;
}

la herramienta de análisis de código de Eclipse CODAN). Ahi estainsecto informe y ha sidofijo y debe estar disponible en CDT 8.3.0 que vencerá en febrero de 2014.

go de Eclipse.

Si lo desea, puede evitar este mensaje deshabilitando completamente la comprobación de sobrecargas no válidas:

Abrir ventana de preferencias (desde el menú principal Ventana \ Preferencias)Ir a C / C ++ -> Análisis de CódigoEn el panel derecho, vea "Sintaxis y errores semánticos" | "Sobrecarga inválida"Desmarque la casilla de verificaciónpresiona OK

Entonces verás que el error desaparece.

Sin embargo, puede omitir los errores reales y puede ser mejor dejar que se verifique, pero use el botón "Personalizar seleccionado" para cambiar su nivel de gravedad.

Lo he cambiado a "ADVERTENCIA" en lugar de "ERROR".

Como dijo @plasmaHH, creo que Eclipse no pudo analizar el C ++ correctamente en este escenario.

traño error deMember declaration not found, invalid overload of endl, Invalid arguments .... Ahora me di cuenta de que es la información en el área de trabajo y que los proyectos antiguos no estaban actualizados para el nuevo código CDT.

Alguien tiene el mismo problema después de actualizar el eclipse o copiar las áreas de trabajo a una nueva plataforma. En realidad es muy fácil de resolver:Project->C/C++ index->Rebuild. Una vez hecho esto, todos los errores extraños desaparecerán.

yourAnswerToTheQuestion