Eclipse CDT: Symbol ‘cout’ não pôde ser resolvido

O erro é como acima. Eu tenho o que deve include todos os arquivos necessários no projeto eclipse:

/usr/include/c++/4.6 /usr/include /usr/include/linux /usr/local/include 

etc.

Eu tentei std::cout e using namespace std; cout mas ainda diz não resolvido.

Eu importei iostream e cstdlib .

Além disso, estou no Ubuntu 12.04 com o eclipse 3.7.2.

Fragmento de código:

 #include  #include  #include  #include  #include "XPLMDisplay.h" #include "XPLMGraphics.h" int XPluginStart(char * outName, char * outSig, char * outDesc) { /* ... */ std::cout << "test" << std::endl; /* ... */ } 

usando namespace std;


ATUALIZAÇÃO: Eu criei o projeto eclipse a partir do código existente. Criando um novo projeto c + + corrige isso. Aceito uma resposta que explica o que a configuração no projeto existente poderia causar (por isso, não preciso cortar e colar todos os meus projetos).

É muito provável que você tenha alguns diretórios de inclusão específicos do sistema ausentes em suas configurações, o que torna impossível para o indexador analisar corretamente o iostream e, assim, os erros. Selecionando Index -> Search For Unresolved Includes no menu de contexto do projeto, você terá a lista de includes não resolvidos que você pode pesquisar em /usr/include e adicionar diretórios contendo a C++ Include Paths and Symbols em Project Properties.

No meu sistema eu tive que adicionar /usr/include/c++/4.6/x86_64-linux-gnu para bits/c++config.h ser resolvido e mais alguns diretórios.

Não esqueça de reconstruir o índice (Index -> Reconstruir) após adicionar diretórios include.

Para se livrar dos avisos de símbolos que você não deseja, primeiro você deve entender como o Eclipse CDT normalmente apresenta avisos de símbolos desconhecidos em primeiro lugar. Este é o seu processo, mais ou menos:

  1. O Eclipse detecta as chaves de ferramentas do GCC disponíveis no sistema
  2. Seu projeto do Eclipse está configurado para usar uma cadeia de ferramentas específica
  3. O Eclipse faz descobertas no toolchain para encontrar seus caminhos de inclusão e definições internas, isto é, executando-o com opções relevantes e lendo a saída
  4. O Eclipse lê os arquivos de header dos caminhos de inclusão
  5. O Eclipse indexa o código-fonte em seu projeto
  6. Eclipse mostra avisos sobre símbolos não resolvidos no editor

Pode ser melhor, a longo prazo, corrigir problemas com as etapas anteriores, em vez de replace seus resultados adicionando manualmente diretórios, símbolos etc.

Porta-ferramentas

Se você tiver o GCC instalado e o Eclipse o detectar, ele deverá listar esse GCC como uma opção de toolchain que um novo projeto C ++ poderia usar, que também será exibido em Window -> Preferences -> C/C++ -> New CDT Project Wizard na checkbox Toolchains de Toolchains da guia Preferred Toolchains no lado direito. Se não estiver aparecendo, veja a resposta da FAQ do CDT sobre compiladores que precisam de ambientes especiais (assim como respostas do MinGW e do Cygwin para o pessoal do Windows).

Se você tiver um projeto Eclipse C ++ existente, poderá alterar o conjunto de ferramentas associado abrindo as propriedades do projeto e indo para C/C++ Build -> Tool Chain Editor e escolhendo a cadeia de ferramentas desejada na lista de Current toolchain: suspenso. (Você terá que desmarcar primeiro a checkbox Display compatible toolchains only se o conjunto de ferramentas desejado for diferente o que foi definido anteriormente no projeto.)

Se você adicionou um conjunto de ferramentas ao sistema após o lançamento do Eclipse, será necessário reiniciá-lo para detectar o conjunto de ferramentas.

Descoberta

Então, se o C/C++ Build -> Discovery Options -> Discovery profiles scope estiver definido como Per Language , durante a próxima construção, o novo conjunto de ferramentas associado ao projeto será usado para a descoberta automática de caminhos e símbolos de inclusão, e ser usado para atualizar os caminhos “built-in” e os símbolos que aparecem no C/C++ General -> Paths and Symbols nas abas Includes e Symbols .

Indexação

Às vezes, você precisa re-indexar novamente depois de definir o conjunto de ferramentas e fazer uma compilation para remover os avisos de símbolos antigos; clique com o botão direito do mouse na pasta do projeto e vá até Index -> Rebuild para fazer isso.

(testado com o Eclipse 3.7.2 / CDT 8)

Obrigado cargas pelas respostas acima. Estou adicionando uma resposta para um caso de uso específico …

Em um projeto com duas arquiteturas de destino, cada uma com sua própria configuração de compilation (o alvo principal é uma plataforma AVR incorporada; o segundo alvo é meu PC Linux local para executar testes de unidade) Eu achei necessário definir Preferences -> C/C++ -> Indexer -> Use active build configuration e adicione /usr/include/c++/4.7 , /usr/include e /usr/include/c++/4.7/x86_64-linux-gnu em Project Properties -> C/C++ General -> Paths and Symbols e depois reconstruir o índice.

Eu tentei a solução marcada aqui primeiro. Funcionou, mas é meio hacky, e você precisa refazê-lo toda vez que atualiza o gcc. Eu finalmente encontrei uma solução melhor, fazendo o seguinte:

  1. Project -> Properties -> C/C++ General -> Preprocessor Include Paths, Macros, etc.
  2. Providers -> CDT GCC built-in compiler settings
  3. Desmarque Use global provider shared between projects (você também pode modificar o provedor global se ele atender à sua necessidade)
  4. No Command to get compiler specs , adicione -std=c++11 no final
  5. Index -> Rebuild

Voila, fácil e simples. Espero que isso ajude.

Nota: Eu estou no Kepler. Não tenho certeza se isso funciona no Eclipse anterior.

Eu estou usando o Ubuntu 12.04 / Eclipse 4.2.1 / CDT 8.1.1 e eu costumava ter o mesmo problema por algum tempo: importar um projeto C ++ do SVN causaria esses erros irritantes de “Inclusão não resolvida” e eu teria que criar um novo projeto e copie os arquivos lá como uma solução alternativa (ainda parcial, já que a funcionalidade do SVN não estaria lá!).

Finalmente, acabei de encontrar uma solução simples e satisfatória:

  • Vá para Project -> Properties -> C/C++ General -> Preprocessor Include Paths, Macros etc. -> Providers e marque Enable language settings providers for this project .

  • Reinicie o Eclipse.

Espero que isso já funcione.

Eu tive um problema semelhante com * std :: shared_ptr * com o Eclipse usando MinGW e gcc 4.8.1. Não importa o que, o Eclipse não resolveria * shared_ptr *. Para corrigir isso, eu adicionei manualmente a macro __cplusplus aos símbolos C ++ e – viola! – O Eclipse pode encontrá-lo. Desde que eu especifiquei -std = c + + 11 como uma opção de compilation, eu (ahem) assumi que o analisador de código do Eclipse usaria essa opção também. Então, para consertar isso:

  1. Contexto do Projeto -> C / C ++ Geral -> Caminhos e Símbolos -> Guia Símbolos
  2. Selecione C ++ no painel Idiomas.
  3. Adicione o símbolo __cplusplus com um valor de 201103 .

O único problema com isto é que o gcc irá reclamar que o símbolo já está definido (!), Mas a compilation será completada como antes.

Para mim, ajudou a ativar a descoberta automatizada em Propriedades -> C / C ++ – Build -> Discovery Options para resolver esse problema.

Eu simplesmente excluo todo o erro na lista de problemas: em seguida, fechar o projeto e reabrir projeto limpo projeto construir toda a corrida

então esses erros estúpidos vão.

Se tudo mais falhar, como aconteceu no meu caso, desative as annotations. Eu comecei um projeto c ++ 11 com makefile próprio, mas não consegui consertar todos os problemas. Mesmo se você desativar as annotations, o Eclipse ainda poderá ajudá-lo a realizar autocomplete. Mais importante ainda, o depurador ainda funciona!

Eu tive o mesmo problema usando o Eclipse CDT (Kepler) no Windows com o Cygwin instalado. Depois de apontar as propriedades do projeto em cada Cygwin, eu não conseguia encontrar.

A peça final que faltava acabou sendo C:cygwin64\lib\gcc\x86_64-pc-cygwin\4.8.2\install-tool\include .

Resumindo:

  • Clique com o botão direito no projeto
  • Escolha as Properties
  • Navegue até C/C++ General > Paths and Symbols > guia Includes
  • Clique em Add...
  • Clique em File system...
  • Navegue até o local do seu Cygwin lib\gcc\x86_64-pc-cygwin\4.8.2\install-tool\include
  • Clique OK

Aqui está o que meu projeto inclui acabou parecendo quando tudo foi dito e feito: insira a descrição da imagem aqui

Vocês estão olhando na seção errada. Eu percebi a diferença quando eu instalei no Linux depois de recentemente ficar frustrado com o Windows e a diferença foi imediatamente aparente.

Na nova configuração eu tenho uma pasta includes em um projeto que eu criei a partir de uma fonte existente. Eu posso expandir isso e ver uma tonelada de inclusões; no entanto, não posso adicionar a eles. Isso me levou a uma busca por onde esses arquivos estavam sendo listados.

Eles estão listados sob as Propriedades do Projeto> C / C ++ Geral> Preprocessor Includes> Configurações do Compilador Interno do GNU C ++ CDT GCC [Compartilhado] Sob essa é uma tonelada de inclusões.

Essas configurações são definidas pela toolchain que você selecionou.

Eu criei o projeto Makefile usando o cmake no Ubuntu 16.04.

Quando criei o projeto eclipse para os Makefiles que o cmake gerou, criei o novo projeto da seguinte forma:

Arquivo -> novo -> Makefile project com código existente.

Somente depois de fazer isso algumas vezes, notei que a configuração padrão para o “Conjunto de ferramentas para as configurações do indexador” é nenhuma. No meu caso eu mudei para o Linux GCC e todos os erros desapareceram.

Espero que ajude e deixe-me saber se não é uma solução legítima.

Felicidades,

Cara.

Apenas adicionando mais um pouco de conselho depois de tentar um monte de coisas eu mesmo e não está funcionando ….

Eu tinha o GCC instalado e o caminho para as inclusões definido corretamente. Teve o erro padrão também, e não consegui fazer nada para cout (e suspeito de algo no SL …)

Demorei um pouco para perceber que o g ++ não estava instalado – o gcc era, mas não o g ++. Então faça:

sudo apt-get instala g ++

Reinicie o eclipse. Supondo que os detalhes acima mencionados sobre o gcc e os caminhos para inclusão sejam bons, você deve estar bem agora …

Eu tive isso depois de atualizar o gcc e eclipse no ArchLinux. O que resolveu para mim foi Project -> C/C++ Index -> Rebuild .