Estou tentando atualizar meu compilador C ++ para C ++ 11. Pesquisei um pouco e cheguei à conclusão de que tenho de usar a bandeira -std=c++0x
ou -std=gnu++0x
, mas não sei muitas coisas sobre bandeiras. Alguém pode me ajudar? (Estou usando o Ubuntu 12.04.)
Aqui está o erro que eu recebo do compilador quando tento usar uma biblioteca que está incluída no C ++ 11 (ou seja, matriz):
#include <array>
#include <iostream>
int main()
{
std::array<int, 3> arr = {2, 3, 5};
...
}
Esse arquivo requer suporte do compilador e da biblioteca para o próximo padrão ISO C ++, C ++ 0x. Atualmente, esse suporte é experimental e deve ser ativado com as opções do compilador -std = c ++ 0x ou -std = gnu ++ 0x.
-std=c++11
. Talvez ambos sejam permitidos, no entanto.g++-4.6
por padrão (que suporta apenas-std=c++0x
)g++
, por exemplog++ -std=c++0x _filename_ && ./a.out
.Respostas:
Sinalizadores (ou opções do compilador) não passam de argumentos comuns da linha de comando passados para o executável do compilador.
Supondo que você esteja chamando o g ++ na linha de comando (terminal):
$ g++ -std=c++11 your_file.cpp -o your_program
ou
$ g++ -std=c++0x your_file.cpp -o your_program
se o acima não funcionar.
fonte
-Wall -g
logo apósg++
-Werror
também, não há razão para isso ao iniciar um projeto.Você pode verificar seu
g++
comando:isso informará qual complier está apontando no momento.
Para mudar para
g++
4.7 (assumindo que você o instalou em sua máquina), execute:Em seguida, selecione
2
como seleção (Minha máquina já está apontando parag++
4.7, então o *)Depois de trocar o complier, execute novamente
g++ --version
para verificar se a troca ocorreu corretamente.Agora compile seu programa com
fonte
Seu ubuntu definitivamente possui uma versão suficientemente recente do g ++. A bandeira a ser usada é
-std=c++0x
.fonte
I'm using Ubuntu 12.04.
na pergunta.Se você deseja manter as extensões do compilador GNU, use -std = gnu ++ 0x em vez de -std = c ++ 0x. Aqui está uma citação da página de manual:
fonte
?:
operador binário ? A única outra extensão que vem à mente, expressões de estrutura, é substituída pela inicialização da lista do C ++ 11. De qualquer forma, essa citação refere-se principalmente a C, não a C ++.Você pode consultar o link a seguir, para o qual os recursos são suportados na versão específica do compilador. Possui uma lista exaustiva de suporte a recursos no compilador. Parece que o GCC segue o padrão de perto e implementa antes de qualquer outro compilador.
Em relação à sua pergunta, você pode compilar usando
g++ -std=c++11
para C ++ 11g++ -std=c++14
para C ++ 14g++ -std=c++17
para C ++ 17g++ -std=c++2a
para C ++ 20, embora todos os recursos do C ++ 20 ainda não sejam suportados, consulte este link para obter a lista de suporte de recursos no GCC.A lista muda muito rapidamente, fique de olho na lista, se você estiver aguardando o suporte de um recurso específico.
fonte