Eclipse 3.7.1 CDT 1.4.1 GCC 4.6.2
Este é um exemplo de uma parte do código C ++ 11:
auto text = std::unique_ptr<char[]>(new char[len]);
O editor Eclipse reclama sobre:
Function 'unique_ptr' could not be resolved
A compilação Makefile funciona bem. Como fazer o Eclipse parar de reclamar sobre esse tipo de erro?
c++
eclipse
c++11
eclipse-cdt
usuario
fonte
fonte
std::unique_ptr<char[]>
unique_ptr<char>
chamariadelete
, o que está errado desde que foi criadonew[]
?delete
que seja chamado quando você precisardelete[]
. Ounique_ptr<char>
pressuposto é que ele está recebendo um ponteiro, que é excluído comdelete
.unique_ptr<char[]>
espera uma matriz, que é excluídadelete[]
corretamente.Respostas:
Encontrei este artigo no fórum Eclipse, apenas segui essas etapas e funciona para mim. Estou usando o Eclipse Indigo 20110615-0604 no Windows com uma configuração do Cygwin.
-std=c++0x
(ou para a versão mais recente do compilador-std=c++11
no final. ... em vez do compilador GCC C ++, também tenho o compilador Cygwin__GXX_EXPERIMENTAL_CXX0X__
(certifique-se de acrescentar e colocar dois sublinhados) em "Nome" e deixe "Valor" em branco.Agora, há uma descrição disso nas Perguntas frequentes do Eclipse : Perguntas frequentes sobre o Eclipse / Recursos do C ++ 11 .
Configuração de imagem do Eclipse
fonte
&&
.Instrução para Eclipse CDT 4.4 Luna e 4.5 Mars
Primeiro, antes de criar o projeto, configure o analisador de sintaxe do Eclipse:
Window
->Preferences
->C/C++
->Build
->Settings
->Discovery
->CDT GCC Build-in Compiler Settings
na caixa de texto intitulada
Command to get compiler specs
anexar-std=c++11
Agora você pode criar um projeto, a configuração depende do tipo de projeto que você criou:
Para projeto criado como: Arquivo -> Novo -> Projeto -> C / C ++ -> Projeto C ++
Clique com o botão direito do mouse no projeto criado e abra
Properties
->C/C++ Build
->Settings
->Tool Settings
->GCC C++ Compiler
->Dialect
Coloque
-std=c++11
na caixa de texto autorizadaother dialect flags
ou selecioneISO C++11
na listaLanguage standard
suspensa.Para o projeto CMake
Gere arquivos de projeto eclipse (dentro do seu projeto)
Em seguida, importe o diretório gerado para eclipse como projeto eclipse padrão. Clique com o botão direito do mouse no projeto e abra
Properties
->C/C++ General
->Preprocessor Include Paths, Marcos etc.
->Providers
ative
CDT GCC Build-in Compiler Settings
e mova mais alto queContributed PathEntry Containers
(Isso é importante)Última etapa comum
recompile, gere novamente
Project
->C/C++ Index
e reinicie o Eclipse.fonte
-std=c++11
eraProject Properties -> C/C++ General -> Preprocessor Include Paths, Macros etc. -> Providers [tab] -> CDT GCC Built-in Compiler Settings -> Command used to get compiler specs:
. Anexe seu-std=c++11
a isso. Eu o defini nas configurações globais da área de trabalho como sugerindo, mas não foi copiado no local que descrevi acima quando criei um novoMakefile
projeto.Atualização 2016:
A partir do gcc 6 ( alterações ), o dialeto C ++ padrão é C ++ 14. Isso significa que, a menos que você precise explicitamente de um dialeto mais novo ou mais antigo que o, não precisará mais fazer nada com o eclipse.
Para Luna e Marte
Esta seção do wiki da comunidade incorpora a resposta de Trismegistos;
1. Antes de criar o projeto, configure o analisador de sintaxe Eclipse:
Janela -> Preferências -> C / C ++ -> Construção -> Configurações -> Descoberta -> Configurações do compilador incorporado do CDT GCC
na caixa de texto intitulada Comando para obter as especificações do compilador anexadas
-std=c++14
2. Crie um projeto, a configuração depende do tipo de projeto que você criou:Para projeto criado como: Arquivo -> Novo -> Projeto -> C / C ++ -> Projeto C ++
Clique com o botão direito do mouse no projeto criado e abra
Propriedades -> Compilação C / C ++ -> Configurações -> Configurações da ferramenta -> Compilador GCC C ++ -> Dialeto
Coloque
-std=c++14
na caixa de texto intitulada outros sinalizadores de dialeto ou selecione ISO C ++ 11 no menu suspenso Padrão do idioma.Agora há uma nova maneira de resolver isso sem o hack GXX_EXPERIMENTAL.
Para versões mais recentes : (atualmente
Juno e KeplerLuna ):Nas versões mais recentes do Juno, as configurações estão localizadas em
Project properties -> C/C++ General -> Preprocessor Include Paths, Macros etc. -> tab Providers -> CDT GCC Builtin Compiler Settings ()
.Versões anteriores 2012/2013:
Em C / C ++ Build (nas configurações do projeto), localize o Caminho de inclusão do pré - processador e vá para a guia Provedores . Desmarque todas, exceto as configurações do compilador interno CDT GCC. Desmarque Compartilhar entradas de configurações…. Adicione a opção -std = c ++ 11 à caixa de texto chamada Command para obter especificações do compilador.
Vá para caminhos e símbolos. Em símbolos, clique em restaurar padrões e, em seguida, aplique.
Notas:
O Eclipse é exigente ao clicar em Aplicar, você precisa fazer isso sempre que sair de uma guia de configurações.
[Autopromoção]: escrevi minhas próprias instruções mais detalhadas com base no exposto acima. http://scrupulousabstractions.tumblr.com/post/36441490955/eclipse-mingw-builds
Graças ao usuário
Nobody
em https://stackoverflow.com/a/13635080/1149664fonte
#ifndef __GXX_EXPERIMENTAL_CXX0X__
retorna true e o código abaixo não é analisado. Quando adiciono__GXX_EXPERIMENTAL_CXX0X__
aos símbolos do projeto, a matriz é resolvida, mas as referências do meu projeto são alteradas. Qual pode ser o problema aqui?Para o mais recente (Juno) eclipse cdt, o seguinte funcionou para mim, sem necessidade de declarar
__GXX_EXPERIMENTAL_CXX0X__
sobre mim mesmo. Isso funciona para o indexador CDT e como parâmetro para o compilador:"nome do seu projeto" -> clique com o botão direito do mouse -> propriedades:
C / C ++ Geral -> Pré-processador Incluir Caminhos, Macros etc. -> alterne para a guia denominada "Provedores":
para "Configuração", selecione "Liberar" (e depois "depurar")
desligue todos os provedores e selecione "Configurações do compilador interno do CDT GCC"
desmarque "Compartilhar entradas de configuração entre projetos (provedor global)"
no "Comando para obter especificações do compilador:" add "-std = c ++ 11" sem as aspas (pode funcionar com aspas também)
clique em aplicar e feche as opções
reconstruir o índice
Agora todo o material relacionado ao c ++ 11 deve ser resolvido corretamente pelo indexador.
win7 x64, o mais recente eclipse oficial com o cdt mingw-w64 gcc 4.7.2 do projeto mingwbuilds no sourceforge
fonte
Eu tive o mesmo problema no meu Eclipse Juno. Estas etapas resolveram o problema:
Project -> Properties -> C/C++ General -> Path and Symbols -> Tab [Symbols]
.fonte
Para o Eclipse CDT Kepler, o que funcionou para me livrar do
std::thread
símbolo não resolvido é:Vá para Preferências-> C / C ++ -> Construção-> Configurações
Selecione a guia Descoberta
Selecione Configurações do compilador interno do CDT GCC [compartilhado]
Adicione o -std = c ++ 11 ao campo "Comando para obter as especificações do compilador:", como:
Adicionar
-std=c++11
ao projetoProperties/C/C++ Build->Settings->Tool Settings->GCC C++ Compiler->Miscellaneous->Other
Flags não foi suficiente para o Kepler, no entanto, foi suficiente para versões mais antigas, como o Helios.fonte
Ainda não posso comentar, por isso estou escrevendo minha própria resposta:
Está relacionado
__GXX_EXPERIMENTAL_CXX0X__
e é válido para Eclipse Juno e CDT 8.x.Algumas partes desta resposta já estão cobertas em outras respostas, mas quero que seja coerente.
Para tornar possível construir usando o stdc ++ 11, é necessário adicionar um sinalizador específico para o compilador. Você pode fazer isso através das propriedades do projeto. Para modificar as propriedades do projeto
RMB
eProject properties
ouALT + ENTER
. Em seguida, C / C ++ Build -> Configurações -> Configurações da ferramenta -> Compilador GCC C ++ -> Diversos -> Outros sinalizadores. Coloque -std = c ++ 11 no final da linha, para o GCC que será algo parecido com:-c -fmessage-length=0 -std=c++11
. Adicionando -stdc ++ 11 o compilador de sinalizadores (GCC) declarará__GXX_EXPERIMENTAL_CXX0X__
por si só.Neste ponto, você pode criar um projeto usando toda a bondade do C ++ 11.
O problema é que o Eclipse possui seu próprio analisador para verificar se há erros - é por isso que você ainda está recebendo todos os erros desagradáveis no editor Eclipse, enquanto ao mesmo tempo pode criar e executar o projeto sem nenhum. Existe uma maneira de resolver esse problema declarando explicitamente o
__GXX_EXPERIMENTAL_CXX0X__
sinalizador para o projeto; é possível fazer isso (como Carsten Greiner disse): C / C ++ Geral -> Caminhos e Símbolos -> Símbolos -> GNU C ++. Clique em "Adicionar ..." e depois__GXX_EXPERIMENTAL_CXX0X__
(certifique-se de acrescentar e colocar dois sublinhados) em "Nome" e deixe "Valor" em branco. E agora é a parte extra que eu queria abordar no comentário à primeira resposta, vá para: C / C ++ Geral -> Pré-processador Incluir macros de caminho etc. -> Provedores e SelecionarCDT Managed Build Setting Entries
clique em APLICAR e volte para a guia Entradas, no GNU C ++ agora deve haver Entradas de Configuração de Compilação Gerenciada CDT, verifique se lá dentro está definido__GXX_EXPERIMENTAL_CXX0X__
se está -> APLICAR e reconstruir o índice, você deve estar bem neste momento.fonte
Também tive vários problemas (Ubuntu 13.04 de 64 bits, g ++ - 4.8, eclipse Juno 3.8.1, CDT 6.0.0). Muitas coisas são mencionadas acima, desculpe repeti-las, mas, além disso, tive problemas ao utilizar
como parte do c ++ 11 (adicionar -pthread para o vinculador resolve esse problema). Enfim, finalmente essas configurações funcionaram bem:
Projeto -> Propriedades -> Compilação C / C ++ -> Configurações -> Diversos. Adicione o
sinalizador para os compiladores GCC e G ++. Clique em Aplicar.
Para o vinculador, a mesma janela, Diversos, sinalizadores de vinculador, adicionou o
bandeira. Configurações da biblioteca compartilhada, Nome do objeto compartilhado, adicione o
bandeira também. Clique em Aplicar.
C / C ++ Geral -> Caminhos e símbolos -> Símbolos TAB, GNU C ++ selecionado, Adicionar o
(sem valor)
bandeira. Clique em Aplicar.
C / C ++ Geral -> Pré-processador Incluir caminhos .. -> guia Provedores: marque
Configurações do compilador CDT GCC
e para "Comando para obter especificações do compilador", adicione o
bandeira. Desmarque Compartilhar. Clique em Aplicar.
O CDT gerencia entradas de configuração de compilação, verifique isso também. Desmarque as duas outras. Clique em Aplicar.
Voltando à guia Entradas, o GNU C ++ CDT Gerencia Configurações de Configuração de Entradas, agora você verá as
entrada.
É isso aí. Ao codificar, digitar
agora é possível concluir automaticamente a classe de encadeamento, por exemplo, as compilações devem funcionar bem e não deve haver
em tempo de execução.
fonte
Project -> Properties -> C/C++ Build -> Settings -> Miscellaneous
passo que funcionou para mim. Obrigado, um monte: DEu não sei se sou apenas eu, a solução mais alta classificada não funciona para mim, minha versão do eclipse é apenas a plataforma eclipse normal instalada usando o sudo apt-get install eclipse no Ubuntu Mas eu encontrei uma solução que adota o método juntos da solução com a classificação mais alta e da segunda, o que fiz para fazê-lo funcionar é descrito abaixo (observe que outras etapas, como a criação de um projeto C ++ etc., são ignoradas por simplicidade)
Depois de criar o projeto C ++
(1) C / C ++ Geral -> Caminhos e Símbolos -> Símbolos -> GNU C ++. Clique em "Adicionar ..." e cole GXX_EXPERIMENTAL_CXX0X (certifique-se de acrescentar e colocar dois sublinhados) em "Nome" e deixe "Valor" em branco.
(2) Em Compilação C / C ++ (nas configurações do projeto), localize o Caminho de inclusão do pré-processador e vá para a guia Provedores. Desmarque todas, exceto as configurações do compilador interno CDT GCC. Desmarque Compartilhar entradas de configurações…. Adicione a opção -std = c ++ 11 à caixa de texto chamada Command para obter especificações do compilador
Depois de executar acima de 2 e 2 apenas etapas, ele funciona, o eclipse é capaz de resolver o unique_ptr, não sei por que essa solução funciona, espero que possa ajudar as pessoas.
fonte
O Eclipse C / C ++ não reconhece o símbolo
std::unique_ptr
mesmo que você tenha incluído o cabeçalho de memória C ++ 11 em seu arquivo.Supondo que você esteja usando o compilador GNU C ++, foi o que fiz para corrigir:
Projeto -> Propriedades -> Geral do C / C ++ -> Caminhos de inclusão do pré-processador -> GNU C ++ -> Entradas de configuração do usuário CDT
Clique no botão "Adicionar ..."
Selecione "Macro de pré-processador" no menu suspenso
Pressione Aplicar e, em seguida, OK para voltar ao seu projeto
Em seguida, recrie o índice C ++: Projetos -> Índice C / C ++ -> Reconstruir
fonte
Para mim, no Eclipse Neon , segui a resposta do Trismegistos aqui acima , mas também adicionei uma etapa adicional:
Clique em Aplicar e OK.
Felicidades,
Cara.
fonte
fonte
Nem o hack nem a versão mais limpa funcionam para o Indigo. O hack é ignorado e as opções de configuração necessárias estão ausentes. Sem motivo aparente, o build começou a funcionar depois de não funcionar e não forneceu nenhum motivo útil para isso. Pelo menos na linha de comando, obtenho resultados reproduzíveis.
fonte
Para obter suporte para C ++ 14 no Eclipse Luna, você pode executar estas etapas:
C++ General -> Preprocessor Include -> Providers -> CDT Cross GCC Built-in Compiler Settings
, adicione "-std = c ++ 14"C++ Build -> Settings -> Cross G++ Compiler -> Miscellaneous
, adicione "-std = c ++ 14"Reinicialize seu projeto e, eventualmente, reinicie o Eclipse. Deve funcionar como esperado.
fonte
Eu resolvi dessa maneira em um Mac. Usei o Homebrew para instalar a versão mais recente do gcc / g ++. Eles pousam em / usr / local / bin com inclui em / usr / local / include.
Coloquei o CD em / usr / local / bin e fiz um link simbólico de g ++ @ 7 para qualquer g ++, pois esse @ bit é irritante.
Depois fui para MyProject -> Propriedades -> Compilação C / C ++ -> Configurações -> Compilador GCC C ++ e alterei o comando de "g ++" para "/ usr / local / bin / g ++". Se você decidir não criar o link simbólico, poderá ser mais específico.
Faça o mesmo para o vinculador.
Aplicar e Aplicar e Fechar. Deixe reconstruir o índice. Por um tempo, mostrou um número assustador de erros, mas acho que foi ao criar índices. Enquanto eu descobria os erros, todos eles desapareceram sem mais ações.
Eu acho que sem verificar se você também pode entrar no Eclipse -> Propriedades -> C / C ++ -> Core Build Toolchains e editar aqueles com caminhos diferentes, mas não tenho certeza do que isso fará.
fonte
Eu tive um problema semelhante ao usar o Eclipse C ++ 2019-03 para um projeto misto de C e C ++ que usava std :: optional e std :: swap. O que funcionou para mim foi isso. No projeto Propriedades-> C / C ++ Build-> Configurações-> Configurações da Ferramenta-> Cross G ++ Compiler, remova -std = gnu ++ 17 de Miscellaneous e coloque-o em Dialect-> Other Dialect Flags.
fonte
Ao usar um compilador cruzado, geralmente recebo sistemas avançados de criação personalizados meticulosamente criados por colegas. Eu uso "Projeto Makefile com código existente" para que a maioria das outras respostas não seja aplicável.
No início do projeto, preciso especificar que estou usando um compilador cruzado no assistente para "Makefile Project with Existing Code". O irritante é que, nos últimos 10 anos, o botão do compilador cruzado nesse assistente não pergunta onde está o compilador cruzado. Portanto, em uma etapa que corrige o problema do C ++ e o problema do compilador cruzado, tenho que ir para a guia provedores, como mencionado em respostas como @ravwojdyla acima, mas o provedor que devo selecionar é o provedor do compilador cruzado. Em seguida, na caixa de comando, coloquei o caminho completo para o compilador e adicionei -std = gnu ++ 11 para o padrão C ++ para o qual desejo suporte. Isso funciona tão bem quanto se pode esperar.
Você pode fazer isso com um projeto existente. A única coisa que você precisa fazer é executar novamente o indexador.
Nunca tive que adicionar a flag experimental ou substituir a definição de __cplusplus. A única coisa é que, se eu tiver uma quantidade substancial de código C moderno, não tenho onde colocar a opção padrão específica de C.
E quando as coisas estão indo muito mal, obter um log do analisador, usando esse comando no submenu Indexador, pode ser muito informativo.
fonte