2012-10-31 14 views
6

Utilizzo Eclipse Juno con CDT per sviluppare il mio progetto C++ con makefile personalizzato. Sto anche usando le funzionalità di C++ 11, che ho avuto modo di lavorare con il parser di Eclipse seguendo i consigli qui su SO.Eclipse CDT non può analizzare i metodi sugli elementi nei contenitori STL

Il problema è che Eclipse non è in grado di analizzare i metodi oi campi a cui si accede negli elementi del contenitore STL. Ad esempio:

mainapp.h

typedef struct _PlayerCalibrationData { 
    [...] 
    std::string getSamplesStr() 
    { 
      [...] 
    } 
} PlayerCalibrationData; 

std::vector<MainApp::PlayerCalibrationData> m_calibrationData; 

mainapp.cpp

m_calibrationData[0].getSamplesStr(); 

getSamplesStr() sarà sottolineato e contrassegnato come un errore, con il messaggio "Metodo 'getSamplesStr' non poteva essere risolto ".

Il compilatore non si lamenta, tuttavia, indipendentemente dal fatto che lo invoco da Eclipse o dalla riga di comando.

Inoltre, quando digito m_calibrationData., tutti i metodi di Vector pop up tramite contenuti assist (vale a dire che non è un problema di Eclipse non trovare il vettore include), ma non appena ho accedere a un elemento tramite [] o at(), contenuti assist è silenzioso e tutto ciò che è stato digitato manualmente è contrassegnato come un errore.

È normale che questo non funzioni? In caso affermativo, esiste un modo per disattivare specificamente l'assistenza/correzione per i contenitori basati su modelli?

EDIT

ho ora anche provato a rendere invalido C++ 11 di supporto, e se lo faccio che il problema scompare - ma poi, naturalmente, il C++ 11 tipi e sintassi non sono riconosciuti.

EDIT 2

ho importato un secondo progetto, inserito esattamente le stesse impostazioni, e per questo progetto i lavori di analisi. L'unica differenza è il layout del progetto (diversa posizione dei makefile). Ma anche se cancello e reimportiamo il primo progetto, non funziona ancora.

+1

Il problema è molto probabilmente lo stesso di [this] (https://bugs.kde.org/show_bug.cgi?id=299124), sebbene non sia per Eclipse. Inserisco un bug per cdt –

+1

Sembra che CDT non stia analizzando correttamente il valore restituito da 'operator []' per 'std :: vector'. Ricevete anche errori come "Argomenti non validi" per istruzioni come 'foo.push_back (m_calibrationData [0])'? Vedi [questo bug] (https://bugs.eclipse.org/bugs/show_bug.cgi?id=349849) –

risposta

5

questo ha funzionato per me:

"il nome di progetto" -> tasto destro -> Proprietà:

C/C++ Generale -> preprocessore percorsi di inclusione, ecc macro-> passare alla scheda denominata "Provider":

  • per "Configurazione" selezionare "Release" (e poi "debug")

  • Spegnere tutti i fornitori e basta selezionare "CDT GCC Built in Impostazioni del compilatore"

  • deselezionare "le voci di impostazione di Azioni tra i progetti (fornitore globale)"

  • nel "comando per ottenere le specifiche del compilatore:" add "-std = C++ 11" senza le virgolette (potrebbe funzionare anche con le virgolette)

  • colpo applicare e chiudere le opzioni

  • ricostruire l'indice

questo funziona per me su entrambi i mashines, a casa e sul posto di lavoro x64 win7, ultima eclissi ufficiale con CDT mingw-w64 gcc 4.7.2 dal progetto mingwbuilds su sourceforge

+0

Suona bene ma non funziona per me. Ho disabilitato tutti i builder per risolvere un problema di loop di ricostruzione infinito in precedenza. – Eric

+0

Ugg, è ok adesso, quindi c'è qualcosa in questa risposta dopo tutto =) – Eric

Problemi correlati