2013-07-01 8 views
5

Essa, dopo tutto, vengono definite in stddef.h e C++ config.h:Eclipse CDT analisi del codice pensa size_t è ambiguo

C++ config.h:

namespace std 
{ 
    typedef __SIZE_TYPE__  size_t; 
    typedef __PTRDIFF_TYPE__ ptrdiff_t; 

#ifdef __GXX_EXPERIMENTAL_CXX0X__ 
    typedef decltype(nullptr) nullptr_t; 
#endif 
} 

stddef .h:

typedef __SIZE_TYPE__ size_t; 

Così, quando un file non using namespace std, l'analisi del codice di Eclipse CDT si confonde e dice che il simbolo è ambiguo. Non so come funziona gcc, ma qualcuno ha qualche suggerimento su cosa fare per l'analisi del codice Eclipse?

+0

Nel codice che mostri size_t viene definito solo in C++ config.h. __SIZE_TYPE__ è definito in stddef.h e utilizzato in C++ config.h - qual è il problema reale – Mark

+0

@Mark Oops, copiato nella riga sbagliata. Risolto ora. Grazie! – Chris

+0

In che file si usa? – Mark

risposta

4

L'ho risolto disabilitando completamente quell'errore nell'analisi del codice.

Progetto -> Proprietà -> C/C++ Generale -> analisi del codice

Deseleziona 'problema ambiguo'

1

Si tratta in gran parte, ma non del tutto, vero che il codice C valido è anche un codice valido C++. Hai colpito un caso in cui non è vero. Questa domanda ha una risposta molto buona sulla differenza in questo caso: Repeated typedefs - invalid in C but valid in C++? Vale anche la pena notare che C11 risolverà questa incompatibilità.

Il risultato, in realtà, è che questo comportamento è da qualche parte tra una carenza e un difetto nell'analisi del codice CDT. CDT dovrebbe sapere che il codice è C++ e per consentire la sintassi, ma sembra come se pensasse che fosse C e non lo consentiva.