Próbuję zaktualizować mój kompilator C ++ do C ++ 11. Trochę przeszukałem i doszedłem do wniosku, że muszę użyć flagi -std=c++0x
lub -std=gnu++0x
, ale niewiele wiem o flagach. Czy ktoś może mi pomóc? (Używam Ubuntu 12.04.)
Oto błąd, który otrzymuję z kompilatora, gdy próbuję użyć biblioteki zawartej w C ++ 11 (tj. Tablicy):
#include <array>
#include <iostream>
int main()
{
std::array<int, 3> arr = {2, 3, 5};
...
}
Ten plik wymaga obsługi kompilatora i biblioteki dla nadchodzącego standardu ISO C ++, C ++ 0x. Ta obsługa jest obecnie w fazie eksperymentalnej i musi być włączona z opcjami kompilatora -std = c ++ 0x lub -std = gnu ++ 0x.
-std=c++11
zamiast tego. Może jednak oba są dozwolone.g++-4.6
domyślnie także Ubuntu 12.04 jest dostarczane (które obsługuje tylko-std=c++0x
)g++
, npg++ -std=c++0x _filename_ && ./a.out
.Odpowiedzi:
Flagi (lub opcje kompilatora) to zwykłe argumenty wiersza poleceń przekazywane do pliku wykonywalnego kompilatora.
Zakładając, że wywołujesz g ++ z linii poleceń (terminal):
$ g++ -std=c++11 your_file.cpp -o your_program
lub
$ g++ -std=c++0x your_file.cpp -o your_program
jeśli powyższe nie działa.
źródło
-Wall -g
zaraz pog++
-Werror
, nie ma powodu, aby nie przy rozpoczynaniu projektu.Możesz sprawdzić swoje
g++
polecenie:powie ci to, który dostawca obecnie wskazuje.
Aby przełączyć się na
g++
4.7 (zakładając, że zainstalowałeś go na swoim komputerze), uruchom:Następnie wybierz
2
jako wybór (Moja maszyna wskazuje już nag++
4.7, więc *)Po zmianie kompilatora ponownie uruchom
g++ --version
aby sprawdzić, czy zmiana została poprawnie.Teraz skompiluj swój program
źródło
Twoje ubuntu zdecydowanie ma wystarczająco nową wersję g ++. Flaga do użycia to
-std=c++0x
.źródło
I'm using Ubuntu 12.04.
w pytaniu.Jeśli chcesz zachować rozszerzenia kompilatora GNU, użyj -std = gnu ++ 0x zamiast -std = c ++ 0x. Oto cytat ze strony podręcznika:
źródło
?:
operatora binarnego ? Jedyne inne rozszerzenie, które przychodzi na myśl, wyrażenia struktury, jest zastępowane przez inicjalizację listy C ++ 11. W każdym razie ten cytat dotyczy głównie C, a nie C ++.Możesz zapoznać się z poniższym linkiem dla którego funkcje są obsługiwane w konkretnej wersji kompilatora. Posiada wyczerpującą listę obsługi funkcji w kompilatorze. Wygląda na to, że GCC ściśle przestrzega standardu i implementuje przed jakimkolwiek innym kompilatorem.
Jeśli chodzi o twoje pytanie, możesz je skompilować
g++ -std=c++11
dla C ++ 11g++ -std=c++14
dla C ++ 14g++ -std=c++17
dla C ++ 17g++ -std=c++2a
dla C ++ 20, chociaż wszystkie funkcje C ++ 20 nie są jeszcze obsługiwane, skorzystaj z tego łącza, aby uzyskać listę obsługiwanych funkcji w GCC.Lista zmienia się dość szybko, miej oko na liście, jeśli czekasz na obsługę określonej funkcji.
źródło