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

EDIT: Acontece que isso realmente não é específico para o Eclipse Kepler. Eu tive que usar o mesmo processo para o Eclipse Juno. O problema é que parece que faltam etapas em outras postagens que respondem a essa mesma pergunta.

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

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

Eu segui as instruções do post

Suporte ao Eclipse CDT C ++ 11 / C ++ 0x

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

Comentários diferentes sugeriram o reinício do eclipse e a limpeza e reconstrução. Isso não fez diferença.

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

Configurar o compilador é razoavelmente direto:

  1. Clique com o botão direito do mouse no seu projeto e clique em Propriedades
  2. Em C / C ++, clique em Configurações.
  3. Em GCC C ++ Compiler, clique em Diversos
  4. Na checkbox Outros Flags, acrescente “-std = c ++ 11” à lista de tokens.
  5. Clique em Aplicar e OK

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

  1. Clique com o botão direito do mouse no seu projeto e clique em Propriedades
  2. Em geral C / C ++ clique em “pré-processador include caminhos, macros”
  3. Selecione a guia Provedores
  4. Deve haver um item na lista que diga algo como “GCC Built in Compiler Settings”. Selecione esta input.
  5. Desmarque a opção “Usar provedor global …”
  6. Sob a lista, há uma checkbox que diz “Comando para obter especificações do compilador”. Acrescente “-std = c ++ 0x” a isto.
  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 seguida, em OK.
  9. De volta ao seu espaço de trabalho do Eclipse, selecione o Menu Projeto, Índice C / C ++ e clique em “Re-resolver inclusões não resolvidas”.

Suporte para C ++ 11 no Eclipse Kepler Service Release 1 (ID de criação: 20130919-0819)

Na última versão Eclipse Kepler SR1 você só tem que adicionar -std = c + + 11

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

O “Comando para obter especificações do compilador:” -line deve ser semelhante a:

 ${COMMAND} -E -P -v -dD "${INPUTS}" -std=c++11 

A partir do CDT 8.3 ( disponível como uma atualização do Kepler ), há uma nova opção de dialeto nas configurações de compilation:

http://wiki.eclipse.org/CDT/User/NewIn83#Build

Eu uso o Eclipse Kepler e para corrigi-lo eu fiz isso:

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

2 – Fui ao GCC G ++ Compiler >> Diversos >> Outras Bandeiras

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

Isso resolveu meu problema!

Espero que tenha ajudado!

Executando o eclipse indigo e cdt 8.0.2 aqui. Eu segui todos os guias, mas ainda era necessário definir o pré-processador definir manualmente para encontrar coisas como std :: unique_ptr. O arquivo de inclusão “memory” verifica isso. Definir __cplusplus para 201103L na guia “Símbolos” em “Caminhos e Símbolos” em “C + + Geral” nas propriedades do projeto.

Adicionando dialeto flag “-std = c + + 11” para 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 acima.

Eu estou usando o Eclipse Luna e não há “Configurações de Ferramentas” em C / C ++ Build -> Configurações. Eu adicionei -std = c ++ 11 para a linha de comando de especificações do compilador em “C / C ++ geral -> pré-processador inclui -> provedores” como sugerido. Mas isso ainda não satisfazia a capacidade do meu indexador de resolver o emplace ().

Então eu olhei no arquivo de header e descobri que as funções do emplace são dependentes de __cplusplus> = 201103L. Então eu adicionei o símbolo do pré-processador “__cplusplus” e dei o valor 201103.

Meio hackish, mas o indexador é feliz. (E makefiles definem meus sinalizadores de compilation, não o projeto do eclipse)

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