2012-02-17 12 views
10

He trabajado en un proyecto de C++ usando un editor de texto normal. Más tarde, importé todos los archivos a Eclipse para facilitar la depuración.Declaración de miembro no encontrada

En Eclipse sucede algo raro. Se queja "Declaración de miembro no encontrada" incluso si he incluido el archivo de encabezado. El archivo de encabezado tiene la definición de función.

¿Cómo puedo solucionar este problema?

Gracias de antemano

+0

¿Eclipse sabe dónde buscar el archivo de encabezado? Si lo hace, entonces es probable que necesitemos más información – Neowizard

Respuesta

14

"declaración miembros no se han encontrado" es un error producido por la herramienta de análisis estático Eclipse (codan). Si obtiene este error, pero la compilación tiene éxito, esto es un falso positivo. Las versiones anteriores de esta herramienta son conocidas por dar algunos falsos positivos, ver por ejemplo this bug report. Entonces recomiendo actualizar Eclipse CDT a la versión más reciente.

Otra cosa que puede causar este error es una inclusión no resuelta que impide que Eclipse analice correctamente una parte de su código. Seleccionar Index -> Search For Unresolved Includes en el menú contextual del proyecto le dará la lista de inclusiones sin resolver. Consulte this answer para obtener detalles sobre cómo solucionarlo.

He aquí un ejemplo:

class C { 
    void f(std::vector<int>&); 
}; 

void C::f(std::vector<int>&) {} // Member declaration not found 

El ejemplo anterior provoca "declaración miembros no encontrado" error en Eclipse CDT, incluso si tiene <vector> (caminos debido al mal configurado incluir) incluidos, pero sin resolver.

1

Me di cuenta de que "Declaración de miembro no encontrada" se informará también cuando se crea una clase con un nombre que ya se utiliza o es una palabra clave.

+1

Esto no proporciona una respuesta a la pregunta. Para criticar o solicitar aclaraciones de un autor, deje un comentario debajo de su publicación. –

+2

No estoy de acuerdo con usted. –

5

También experimenté este problema varias veces en Eclipse aunque la construcción fue exitosa. Simplemente podemos resolver este problema reconstruyendo el índice C/C++ en el menú del proyecto. :)

0

Encontré un error en mi archivo .cpp que crea este mensaje. Tenía namespace std { en la parte frontal del archivo, y coloqué nuevas funciones que estaba creando después del cierre } para namespace. Al mover el } de cierre al final del archivo para que los archivos definidos estuvieran ahora en el namespace se corrigió el mensaje de error.

Ejemplo que crea el error.

#include "MyStrFuncs.h" 

**namespace** std { 

MyStrFuncs::MyStrFuncs() { 
    // TODO Auto-generated constructor stub 
} 

MyStrFuncs::~MyStrFuncs() { 
    // TODO Auto-generated destructor stub 
} 

} // This ends the **namespace** 

//Additional functions will now generate the member declaration not found error... 

int MyStrFuncs::str2i(string strIn) { 
    int results; 
    istringstream convert(strIn); 

    if(!(convert)>>results) results = 0; 

    return results; 
} 
// Fix by moving closing } for namespace to here. Good luck. 
0

Incluso con la 4.6.3 "declaración miembros no encontraron" CDT 9.2.1 y Eclipse de neón se presentan problemas. Respondido por Srijeyanthan, lo siguiente debería resolverlo: Proyecto> Índice C/C++> Reconstruir.

0

También experimenté este problema al dividir los archivos fuente y encabezado en eclipse. Lo resolví eclipsando "implementando métodos" en lugar de escribir manualmente y construir el proyecto. Al implementar los métodos, se agregarán "funciones en línea" al archivo fuente.

Cuestiones relacionadas