Como habilitar o C ++ 11 no Eclipse Juno / Kepler / Luna CDT?

85

EDIT: Acontece que isso realmente não é específico para Eclipse Kepler. Tive que usar o mesmo processo para Eclipse Juno. O problema é que parecem faltar etapas em outras postagens que respondem a esta mesma pergunta.

Estou usando o Eclipse Kepler para C ++ e estou tentando usar C ++ 11 e obtendo erros. Quando eu compilo, recebo o erro

erro: loops for baseados em intervalo não são permitidos no modo C ++ 98

Eu segui as instruções da postagem

Compatível com Eclipse CDT C ++ 11 / C ++ 0x

e a solução dada para Eclipse Juno não está funcionando.

Diferentes comentários sugeriram reiniciar o eclipse e limpar e reconstruir. Isso não fez diferença.

user327301
fonte

Respostas:

183

Há duas coisas que você precisa fazer: primeiro, você precisa configurar seu compilador e, em seguida, configurar o processador de linguagem do CDT. Como você não mencionou qual compilador está usando, assumirei que é o GCC, mas as etapas serão semelhantes para outros compiladores. (Observe que você precisa de um compilador que suporte C ++ 11, é claro.)

Configurar o compilador é bastante simples:

  1. Clique com o botão direito no seu projeto e clique em Propriedades
  2. Em C / C ++ Build, clique em Configurações
  3. Em GCC C ++ Compiler, clique em Miscellaneous
  4. Na caixa Outros sinalizadores, anexe "-std = c ++ 11" à lista de tokens.
  5. Clique em Aplicar e OK

Neste ponto, você deve ser capaz de reconstruir seu projeto e colocá-lo em execução. Mas o CDT ainda pode mostrar erros para inclusões do C ++ 11. Veja como você pode resolver isso:

  1. Clique com o botão direito no seu projeto e clique em Propriedades
  2. Em C / C ++ Geral, clique em "Pré-processador incluir caminhos, macros"
  3. Selecione a guia Provedores
  4. Deve haver um item na lista que diz algo como "GCC Built in Compiler Settings". Selecione esta entrada.
  5. Desmarque a opção "Usar provedor global ..."
  6. Abaixo da lista, há uma caixa que diz "Comando para obter especificações do compilador". Anexe "-std = c ++ 0x" a isso.
  7. Mova o provedor "GCC Built in Compiler Settings" no topo da lista usando o botão 'Move Up' à direita.
  8. Clique em Aplicar e em OK.
  9. De volta à sua área de trabalho do Eclipse, selecione o Menu Projeto, Índice C / C ++ e clique em "Resolver inclusões não resolvidas".
MrEricSir
fonte
1
Obrigado. Isso funcionou. Talvez eu tenha interpretado mal o outro post ao qual criei um link, mas parece que não houve menção à configuração do compilador nesse post.
user327301
1
Não funciona para mim. Meu principal problema é o c ++ 11 não resolvido inclui. Eu coloquei -std=c++11onde você disse para colocar e reconstruí o índice completo, ainda mostra um monte de std :: cout, std :: set não reconhecido, etc ...
Dolanor
2
EDIT: Não encontrei a primeira parte onde deveria, mas estou compilando através do make, então pode ser uma explicação. (Eu o encontrei na configuração do espaço de trabalho e configurei-o). Mas coloquei no compiler spec, e ainda não funciona. std :: shared_ptr e mesmo não reconhecido. Embora funcionasse na máquina mais antiga com Juno.
Dolanor
1
No meu caso (gcc) usei -std = c ++ 0x. Então tudo está funcionando. Obrigado!
Denis Zaikin
4
@MrEricSir existe uma maneira de fazer essa configuração para a área de trabalho de forma que, quando eu adicionar um novo projeto, ele seja automaticamente aplicado a ele também?
Ivaylo Strandjev
25

Suporte a C ++ 11 no Eclipse Kepler Service Release 1 (Build id: 20130919-0819)

Na versão mais recente do Eclipse Kepler SR1, você só precisa adicionar -std = c ++ 11

  1. Clique com o botão direito no seu projeto e clique em Propriedades
  2. Navegue até C / C ++ Geral e Pré - processador incluir caminhos, macros etc.
  3. Selecione a guia Provedores
  4. Adicione -std = c ++ 11 ao Command para obter as especificações do compilador:
  5. Aplicar as alterações, o índice deve ser gerado automaticamente.

A linha "Comando para obter especificações do compilador:" deve ser semelhante a:

${COMMAND} -E -P -v -dD "${INPUTS}" -std=c++11
MeJ
fonte
2
Com o GCC, tive que adicionar -std = c ++ 0x
ccook
Qual GCC você usa? c ++ 0X era o nome antigo (alias) para C ++ 11
MeJ
1
Descobri isso uma segunda vez, configurando um novo CDT do eclipse - configurá-lo deve ser mais intuitivo.
ccook de
6

Eu uso o Eclipse Kepler e para corrigi-lo, fiz o seguinte:

1 - Clique com o botão direito do mouse no projeto >> Proprietes >> C / C ++ Build :: Settings

2 - Foi para o compilador GCC G ++ >> Diversos >> Outros sinalizadores

 i then added -std=c++11 
 hit apply and ok

Isso resolveu meu problema!

Espero que tenha ajudado!

Karrq
fonte
Esta é a melhor resposta para a Plataforma Eclipse, Versão: 4.3.1 - Não sei o que é Kepler / Juno!
TCSGrad
Eclipse Kepler é Eclipse versão 4.3.X
Karrq
4

Executando o eclipse indigo e o cdt 8.0.2 aqui. Segui todos os guias, mas ainda era necessário definir manualmente a definição do pré-processador para encontrar coisas como std :: unique_ptr. O arquivo de inclusão "memória" verifica isso. Defina __cplusplus como 201103L na guia "Symbols" em "Paths and Symbols" em "C ++ General" nas propriedades do projeto.

David Karla
fonte
Sim, funciona para migrações de projetos antigos.
Guy L
2

Adicionar o sinalizador de dialeto "-std = c ++ 11" às propriedades do projeto-> C / C ++ Build -> Configurações -> Configurações da ferramenta (GCC C ++ Compiler -> Dialeto) resolveu meu problema no Eclipse Kepler, além das configurações declaradas acima.

mluthra
fonte
1

Estou usando o Eclipse Luna e não há "Configurações da ferramenta" em C / C ++ Build -> Configurações. I DID add -std = c ++ 11 a linha de comando do compilador especificações em "++ Geral C / C -> Preprocessor Inclui -> Provedores", como sugerido. Mas isso ainda não satisfazia a capacidade do meu indexador de resolver emplace ().

Então, procurei no arquivo de cabeçalho e descobri que as funções emplace são dependentes de __cplusplus> = 201103L. Então, acabei de adicionar o símbolo do pré-processador "__cplusplus" e dei a ele o valor 201103.

Meio hackeado, mas o indexador está feliz. (E makefiles definem meus sinalizadores de construção, não o projeto eclipse)

Miles F. Bintz II
fonte
0

A solução fornecida por MrEricSir só funciona depois de ter o mais recente Eclipse Oxygen CDT instalado. Não funciona para mim com o Mars CDT.

StndFish
fonte