2012-02-17 19 views
10

Ho lavorato a un progetto C++ utilizzando un normale editor di testo. Successivamente, ho importato tutti i file in Eclipse per semplificare il debug.Dichiarazione membro non trovata

In Eclipse accade una cosa strana. Si lamenta "Dichiarazione membro non trovata" anche se ho incluso il file di intestazione. Il file di intestazione ha la definizione di funzione.

Come posso risolvere questo problema?

Grazie in anticipo

+0

eclissi sa dove cercare il file di intestazione? Se lo fa, probabilmente avremo bisogno di ulteriori informazioni – Neowizard

risposta

14

"dichiarazione membro non trovati" è un errore prodotto dal tool di analisi statica Eclipse (codan). Se si ottiene questo errore, ma la compilazione ha esito positivo, si tratta di un falso positivo. È noto che versioni precedenti di questo strumento forniscono alcuni falsi positivi, ad esempio this bug report. Quindi consiglio di aggiornare Eclipse CDT alla versione più recente.

Un'altra cosa che può causare questo errore è un irrisolto include che impedisce a Eclipse di analizzare correttamente una parte del codice. Selezionando Index -> Search For Unresolved Includes nel menu di scelta rapida del progetto verrà visualizzato l'elenco di include non risolti. Vedi this answer per i dettagli su come risolverlo.

Ecco un esempio:

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

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

L'esempio di cui sopra fa sì che "dichiarazione Utente non trovato" errore di Eclipse CDT, anche se si dispone di <vector> (percorsi a causa di mal configurato includere) inclusi, ma non risolti.

1

Ho notato che "Dichiarazione membro non trovata" riporterà anche quando si crea una classe con un nome già utilizzato o una parola chiave.

+1

Questo non fornisce una risposta alla domanda. Per criticare o richiedere chiarimenti da un autore, lascia un commento sotto il loro post. –

+2

Non sono d'accordo con te. –

5

Ho anche riscontrato più volte questo problema in Eclipse anche se l'edificio ha avuto successo. Possiamo semplicemente risolvere questo problema ricostruendo l'indice C/C++ nel menu del progetto. :)

0

Ho trovato un errore nel mio file .cpp che crea questo messaggio. Avevo namespace std { nella parte anteriore del file e ho inserito nuove funzioni che stavo creando dopo la chiusura } per namespace. Spostando la chiusura } alla fine del file in modo che ora i file definiti fossero nel namespace risolto il messaggio di errore.

Esempio che crea l'errore.

#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

Anche con il CDT 9.2.1 e Eclipse Neon 4.6.3 vengono segnalati problemi con "Dichiarazione membro non trovata". Come risposta da Srijeyanthan, il seguente dovrebbe risolverlo: Progetto> Indice C/C++> Ricostruisci.

0

Ho anche riscontrato questo problema durante la suddivisione di file di origine e di intestazione in eclipse. Ho risolto questo problema con "metodi di implementazione" eclipse anziché digitare manualmente e creare il progetto. I metodi di implementazione "funzioni inline" verranno aggiunti al file di origine.