Eclipse 3.7.1 CDT 1.4.1 GCC 4.6.2
To jest przykład fragmentu kodu C ++ 11:
auto text = std::unique_ptr<char[]>(new char[len]);
Edytor Eclipse narzeka na:
Function 'unique_ptr' could not be resolved
Kompilacja Makefile działa dobrze. Jak sprawić, by Eclipse przestał narzekać na tego rodzaju błędy?
c++
eclipse
c++11
eclipse-cdt
Nacięcie
źródło
źródło
std::unique_ptr<char[]>
unique_ptr<char>
zadzwonidelete
, co jest złe, ponieważ zostało utworzonenew[]
?delete
zostaniesz wezwany, kiedy będziesz potrzebowaćdelete[]
.unique_ptr<char>
Zakłada, że robi się wskaźnik, który zostanie usunięty zdelete
.unique_ptr<char[]>
oczekuje tablicy, która zostaniedelete[]
poprawnie usunięta .Odpowiedzi:
Znalazłem ten artykuł na forum Eclipse, po prostu wykonałem te kroki i działa on dla mnie. Używam Eclipse Indigo 20110615-0604 w systemie Windows z instalacją Cygwin.
-std=c++0x
(lub dla nowszej wersji kompilatora-std=c++11
na końcu. ... zamiast GCC C ++ Compiler Mam również kompilator Cygwin__GXX_EXPERIMENTAL_CXX0X__
(upewnij się, że dołączasz i wstawiasz dwa podkreślenia) w „Nazwa” i pozostaw puste pole „Wartość”.Opis tego problemu znajduje się teraz w FAQ Eclipse : Funkcje Eclipse FAQ / C ++ 11 .
Ustawienie obrazu Eclipse
źródło
&&
.Instrukcja dla Eclipse CDT 4.4 Luna i 4.5 Mars
Najpierw przed utworzeniem projektu skonfiguruj parser składni Eclipse:
Window
->Preferences
->C/C++
->Build
->Settings
->Discovery
->CDT GCC Build-in Compiler Settings
w polu tekstowym zatytułowanym
Command to get compiler specs
append-std=c++11
Teraz możesz utworzyć projekt, konfiguracja zależy od rodzaju utworzonego projektu:
Dla projektu utworzonego jako: Plik -> Nowy -> Projekt -> C / C ++ -> Projekt C ++
Kliknij utworzony projekt prawym przyciskiem myszy i otwórz
Properties
->C/C++ Build
->Settings
->Tool Settings
->GCC C++ Compiler
->Dialect
Umieść
-std=c++11
w polu tekstowym zatytułowanymother dialect flags
lub wybierzISO C++11
zLanguage standard
menu rozwijanego.Dla projektu CMake
Generuj pliki projektu zaćmienia (wewnątrz projektu)
Następnie zaimportuj wygenerowany katalog do Eclipse jako standardowy projekt Eclipse. Kliknij projekt prawym przyciskiem myszy i otwórz
Properties
->C/C++ General
->Preprocessor Include Paths, Marcos etc.
->Providers
włącz
CDT GCC Build-in Compiler Settings
i przenieś go wyżej niżContributed PathEntry Containers
(Jest to ważne)Ostatni wspólny krok
przekompiluj, zregeneruj
Project
->C/C++ Index
i uruchom ponownie Eclipse.źródło
-std=c++11
do WASProject Properties -> C/C++ General -> Preprocessor Include Paths, Macros etc. -> Providers [tab] -> CDT GCC Built-in Compiler Settings -> Command used to get compiler specs:
. Dołącz-std=c++11
do tego. Miałem go jako sugerowany w globalnych ustawieniach przestrzeni roboczej, ale nie został skopiowany do miejsca, które opisałem powyżej, kiedy tworzyłem nowyMakefile
projekt.Aktualizacja 2016:
Począwszy od gcc 6 ( zmiany ) domyślnym dialektem C ++ jest C ++ 14. Oznacza to, że chyba, że wyraźnie potrzebujesz nowszego lub starszego dialektu niż, nie musisz już nic robić z zaćmieniem.
Dla Luny i Marsa
Ta sekcja wiki społeczności zawiera odpowiedź Trismegistos;
1. Przed utworzeniem projektu skonfiguruj parser składni Eclipse:
Okno -> Preferencje -> C / C ++ -> Kompilacja -> Ustawienia -> Odkrycie -> Ustawienia kompilatora wbudowanego CDT GCC
w polu tekstowym zatytułowanym Command, aby uzyskać specyfikację kompilatora, dodaj
-std=c++14
2. Utwórz projekt, konfiguracja zależy od rodzaju utworzonego projektu:Dla projektu utworzonego jako: Plik -> Nowy -> Projekt -> C / C ++ -> Projekt C ++
Kliknij utworzony projekt prawym przyciskiem myszy i otwórz
Właściwości -> Kompilacja C / C ++ -> Ustawienia -> Ustawienia narzędzi -> Kompilator GCC C ++ -> Dialekt
Umieść
-std=c++14
w polu tekstowym zatytułowanym inne flagi dialektu lub wybierz ISO C ++ 11 z menu rozwijanego Standard języka.Jest teraz nowy sposób na rozwiązanie tego problemu bez hakowania GXX_EXPERIMENTAL.
W przypadku najnowszych wersji : (obecnie
Juno i KeplerLuna ):W nowszych wersjach Juno ustawienia znajdują się pod adresem
Project properties -> C/C++ General -> Preprocessor Include Paths, Macros etc. -> tab Providers -> CDT GCC Builtin Compiler Settings ()
.Starsze wersje 2012/2013:
W obszarze Kompilacja C / C ++ (w ustawieniach projektu) znajdź ścieżkę dołączania preprocesora i przejdź do karty Dostawcy . Odznacz wszystko oprócz Ustawień wbudowanego kompilatora CDT GCC. Następnie odznacz opcję Udostępnij ustawienia… Dodaj opcję -std = c ++ 11 do pola tekstowego o nazwie Command, aby uzyskać specyfikacje kompilatora.
Przejdź do ścieżek i symboli. W obszarze Symbole kliknij przywróć ustawienia domyślne , a następnie zastosuj.
Uwagi:
Eclipse jest wybredny, jeśli chodzi o zastosowanie hitu, musisz to zrobić za każdym razem, gdy opuszczasz kartę ustawień.
[Autopromocja]: W oparciu o powyższe napisałem własne, bardziej szczegółowe instrukcje. http://scrupulousabstractions.tumblr.com/post/36441490955/eclipse-mingw-builds
Dzięki użytkownikowi
Nobody
na https://stackoverflow.com/a/13635080/1149664źródło
#ifndef __GXX_EXPERIMENTAL_CXX0X__
zwraca true, a kod poniżej nie jest analizowany. Kiedy dodam__GXX_EXPERIMENTAL_CXX0X__
do symboli projektu, tablica zostaje rozwiązana, ale odniesienia do mojego projektu zostają pomieszane. W czym może być problem?W przypadku najnowszego (Juno) zaćmienia cdt następujące działało dla mnie, nie muszę deklarować
__GXX_EXPERIMENTAL_CXX0X__
na sobie. Działa to w przypadku indeksatora CDT i jako parametru kompilatora:„nazwa twojego projektu” -> kliknij prawym przyciskiem myszy -> właściwości:
C / C ++ Ogólne -> Preprocesor Uwzględnij ścieżki, makra itp. -> przejdź do zakładki o nazwie „Dostawcy”:
dla „Konfiguracja” wybierz „Zwolnij” (a następnie „debuguj”)
wyłącz wszystkich dostawców i po prostu wybierz „Ustawienia wbudowanego kompilatora CDT GCC”
odznacz „Udostępnij wpisy ustawień między projektami (dostawca globalny)”
w „Poleceniu pobrania specyfikacji kompilatora:„ dodaj ”-std = c ++ 11” bez cudzysłowów (może również działać z cudzysłowami)
naciśnij Zastosuj i zamknij opcje
odbuduj indeks
Teraz wszystkie rzeczy związane z c ++ 11 powinny być poprawnie rozwiązane przez indeksatora.
win7 x64, najnowsze oficjalne zaćmienie z cdt mingw-w64 gcc 4.7.2 z projektu mingwbuilds na sourceforge
źródło
Miałem ten sam problem na moim Eclipse Juno. Te kroki rozwiązały problem:
Project -> Properties -> C/C++ General -> Path and Symbols -> Tab [Symbols]
.źródło
Dla Eclipse CDT Kepler to, co pomogło mi pozbyć się
std::thread
nierozwiązanego symbolu, to:Przejdź do Preferencje-> C / C ++ -> Kompilacja-> Ustawienia
Wybierz kartę Wykrywanie
Wybierz ustawienia wbudowanego kompilatora CDT GCC [Shared]
Dodaj -std = c ++ 11 do pola „Polecenie, aby uzyskać specyfikacje kompilatora:”, takie jak:
Dodanie
-std=c++11
do projektuProperties/C/C++ Build->Settings->Tool Settings->GCC C++ Compiler->Miscellaneous->Other
Flagi nie wystarczyło dla Keplera, jednak wystarczyło dla starszych wersji, takich jak Helios.źródło
Nie mogę jeszcze komentować, więc piszę własną odpowiedź:
Jest powiązany
__GXX_EXPERIMENTAL_CXX0X__
i dotyczy Eclipse Juno i CDT 8.x.Niektóre części tej odpowiedzi są już zawarte w innych odpowiedziach, ale chcę, aby były spójne.
Aby umożliwić kompilację przy użyciu stdc ++ 11, należy dodać specyficzną flagę dla kompilatora. Możesz to zrobić za pomocą właściwości projektu. Aby zmodyfikować właściwości projektu
RMB
iProject properties
lubALT + ENTER
. Następnie C / C ++ Build -> Ustawienia -> Ustawienia narzędzi -> Kompilator GCC C ++ -> Różne -> Inne flagi. Umieścić -std = c ++ 11 na końcu linii, dla GCC będzie to wyglądać mniej więcej tak:-c -fmessage-length=0 -std=c++11
. Dodając -stdc ++ 11 kompilator flag (GCC) zadeklaruje__GXX_EXPERIMENTAL_CXX0X__
sam .W tym momencie możesz zbudować projekt wykorzystując wszystkie zalety C ++ 11.
Problem polega na tym, że Eclipse ma własny parser do sprawdzania błędów - dlatego wciąż otrzymujesz wszystkie nieprzyjemne błędy w edytorze Eclipse, a jednocześnie możesz budować i uruchamiać projekt bez żadnych. Istnieje sposób na rozwiązanie tego problemu poprzez jawne zadeklarowanie
__GXX_EXPERIMENTAL_CXX0X__
flagi dla projektu, można to zrobić (tak jak powiedział Carsten Greiner): C / C ++ Ogólne -> Ścieżki i symbole -> Symbole -> GNU C ++. Kliknij „Dodaj ...” i przeszłość__GXX_EXPERIMENTAL_CXX0X__
(pamiętaj o dołączeniu i dodaniu dwóch znaków podkreślenia) do „Nazwa” i pozostaw puste pole „Wartość”. A teraz jest dodatkowa część, którą chciałem omówić w komentarzu do pierwszej odpowiedzi, przejdź do: C / C ++ Ogólne -> Preprocesor Uwzględnij makra ścieżki itp. -> Dostawcy i wybierzCDT Managed Build Setting Entries
następnie kliknij ZASTOSUJ i wróć do zakładki Wpisy, w GNU C ++ powinny być teraz wpisy ustawień kompilacji zarządzanej przez CDT, sprawdź, czy wewnątrz jest zdefiniowane,__GXX_EXPERIMENTAL_CXX0X__
jeśli jest -> ZASTOSUJ i przebuduj indeks, w tym momencie powinno być dobrze.źródło
Miałem też kilka problemów (Ubuntu 13.04 64-bit, g ++ - 4.8, eclipse Juno 3.8.1, CDT 6.0.0). Wiele rzeczy wspomniano powyżej, przepraszam, że je powtarzam, ale dodatkowo miałem problemy z wykorzystaniem
jako część c ++ 11 (dodanie -pthread dla linkera rozwiązuje ten problem). W końcu te ustawienia działały dobrze:
Projekt -> Właściwości -> Kompilacja C / C ++ -> Ustawienia -> Różne. Dodaj
flaga dla kompilatorów GCC i G ++. Kliknij Zastosuj.
Dla linkera, to samo okno, Różne, Flagi Linkera, dodano
flaga. Ustawienia biblioteki współużytkowanej, Nazwa obiektu współużytkowanego, dodaj
flaga też. Kliknij Zastosuj.
C / C ++ Ogólne -> Ścieżki i symbole -> Symbole TAB, zaznaczono GNU C ++, Dodaj
(bez wartości)
flaga. Kliknij Zastosuj.
C / C ++ Ogólne -> Preprocesor Uwzględnij ścieżki .. -> Karta Dostawcy: sprawdź
CDT GCC Ustawienia wbudowanego kompilatora
i w „Poleceniu pobrania specyfikacji kompilatora”, dodaj
flaga. Odznacz Udostępnij. Kliknij Zastosuj.
CDT zarządza wpisami ustawień kompilacji, sprawdź to również. Odznacz pozostałe dwa. Kliknij Zastosuj.
Wracając do zakładki Wpisy, GNU C ++ CDT Zarządza Wpisami ustawień kompilacji, powinieneś teraz zobaczyć dodane
wejście.
Otóż to. Podczas pisania pisz na maszynie
może teraz automatycznie uzupełniać klasę wątków, kompilacje powinny działać poprawnie i nie powinno być
W czasie wykonywania.
źródło
Project -> Properties -> C/C++ Build -> Settings -> Miscellaneous
dla mnie krok.Nie wiem, czy to tylko ja, najwyżej ocenione rozwiązanie nie działa dla mnie, moja wersja zaćmienia jest po prostu normalną platformą zaćmienia zainstalowaną za pomocą sudo apt-get install eclipse w Ubuntu Ale znalazłem rozwiązanie, które przyjmuje metodę razem zarówno w przypadku rozwiązania najwyżej ocenianego, jak i drugiego, to, co zrobiłem, aby działało, jest opisane poniżej (zauważ, że inne kroki, takie jak tworzenie projektu C ++ itp. są ignorowane dla uproszczenia)
Po utworzeniu projektu C ++
(1) Ogólne informacje o C / C ++ -> Ścieżki i symbole -> Symbole -> GNU C ++. Kliknij „Dodaj ...” i wklej GXX_EXPERIMENTAL_CXX0X ( pamiętaj, aby dodać i wstawić dwa podkreślenia) do „Nazwa” i pozostaw „Wartość” puste.
(2) W obszarze C / C ++ Build (w ustawieniach projektu) znajdź ścieżkę dołączającą Preprocessor i przejdź do zakładki Providers. Odznacz wszystko oprócz Ustawień wbudowanego kompilatora CDT GCC. Następnie odznacz opcję Udostępnij ustawienia… Dodaj opcję -std = c ++ 11 do pola tekstowego o nazwie Command, aby uzyskać specyfikacje kompilatora
Po wykonaniu tylko 2 i 2 kroków, to działa, zaćmienie jest w stanie rozwiązać unikat_ptr, nie wiem, dlaczego to rozwiązanie działa, mam nadzieję, że może pomóc ludziom.
źródło
Eclipse C / C ++ nie rozpoznaje tego symbolu,
std::unique_ptr
mimo że do pliku dołączono nagłówek pamięci C ++ 11.Zakładając, że używasz kompilatora GNU C ++, to właśnie zrobiłem, aby to naprawić:
Projekt -> Właściwości -> Ogólne C / C ++ -> Preprocesor Uwzględnij ścieżki -> GNU C ++ -> Wpisy ustawień użytkownika CDT
Kliknij przycisk „Dodaj ...”
Wybierz „Makro Preprocesora” z menu rozwijanego
Kliknij Zastosuj, a następnie OK, aby wrócić do projektu
Następnie odbuduj indeks C ++: Projekty -> Indeks C / C ++ -> Przebuduj
źródło
Dla mnie w Eclipse Neon podążyłem za odpowiedzią Trismegistos tutaj , ale dodałem również dodatkowy krok:
Kliknij Zastosuj i OK.
Twoje zdrowie,
Chłopak.
źródło
źródło
Ani hack, ani czystsza wersja nie działają w Indigo. Włamanie jest ignorowane i brakuje wymaganych opcji konfiguracji. Bez wyraźnego powodu kompilacja zaczęła działać po tym, jak nie działała i nie podała żadnego przydatnego powodu. Przynajmniej z linii poleceń otrzymuję powtarzalne wyniki.
źródło
Aby uzyskać wsparcie dla C ++ 14 w Eclipse Luna, możesz wykonać następujące kroki:
C++ General -> Preprocessor Include -> Providers -> CDT Cross GCC Built-in Compiler Settings
dodaj „-std = c ++ 14”C++ Build -> Settings -> Cross G++ Compiler -> Miscellaneous
dodaj „-std = c ++ 14”Ponownie zindeksuj swój projekt i ostatecznie zrestartuj Eclipse. Powinno działać zgodnie z oczekiwaniami.
źródło
Rozwiązałem to w ten sposób na komputerze Mac. Użyłem Homebrew do zainstalowania najnowszej wersji gcc / g ++. Wylądują w / usr / local / bin z włączeniami w / usr / local / include.
Włączyłem CD do katalogu / usr / local / bin i utworzyłem dowiązanie symboliczne z g ++ @ 7, cokolwiek do g ++, ponieważ @ bit jest denerwujący.
Potem poszedłem do MyProject -> Właściwości -> Kompilacja C / C ++ -> Ustawienia -> Kompilator GCC C ++ i zmieniłem polecenie z „g ++” na „/ usr / local / bin / g ++”. Jeśli zdecydujesz się nie tworzyć dowiązania symbolicznego, możesz być bardziej szczegółowy.
Zrób to samo dla linkera.
Zastosuj i zastosuj i zamknij. Niech odbuduje indeks. Przez jakiś czas pokazywał zniechęcającą liczbę błędów, ale myślę, że tak było podczas budowania indeksów. Podczas gdy myślałem o błędach, wszystkie zniknęły bez dalszych działań.
Myślę, że bez sprawdzenia, czy możesz również przejść do Eclipse -> Właściwości -> C / C ++ -> Core Build Toolchains i edytować te z różnymi ścieżkami, ale nie jestem pewien, co to zrobi.
źródło
Miałem podobny problem przy użyciu Eclipse C ++ 2019-03 dla mieszanego projektu C i C ++, który używał std :: opcjonalnego i std :: swap. Dla mnie to zadziałało. W projekcie Właściwości-> Kompilacja C / C ++-> Ustawienia-> Ustawienia narzędzi-> Kompilator Cross G ++, usuń -std = gnu ++ 17 z Inne i umieść go w Dialect-> Inne flagi dialektów.
źródło
Podczas korzystania z kompilatora krzyżowego często otrzymuję zaawansowane niestandardowe systemy budowania, starannie opracowane przez kolegów. Używam „Makefile Project z istniejącym kodem”, więc większość innych odpowiedzi nie ma zastosowania.
Na początku projektu muszę określić, że używam kompilatora krzyżowego w kreatorze dla „Makefile Project with Existing Code”. Irytujące jest to, że w ciągu ostatnich 10 lat przycisk kompilatora krzyżowego w tym kreatorze nie wyświetla monitu o podanie lokalizacji kompilatora krzyżowego. Tak więc w kroku, który rozwiązuje problem C ++ i problem kompilatora krzyżowego, muszę przejść do karty dostawców, jak wspomniano w odpowiedziach takich jak @ravwojdyla powyżej, ale dostawcą, którego muszę wybrać, jest dostawca kompilatora krzyżowego. Następnie w polu poleceń podaję pełną ścieżkę do kompilatora i dodaję -std = gnu ++ 11 dla standardu C ++, dla którego chcę mieć wsparcie. Działa to tak dobrze, jak można się spodziewać.
Możesz to zrobić dla istniejącego projektu. Jedyne, co możesz zrobić, to ponownie uruchomić indeksatora.
Nigdy nie musiałem dodawać flagi eksperymentalnej ani zastępować definicji __cplusplus. Jedyne, co mam, jeśli mam znaczną ilość nowoczesnego kodu C, nie mam gdzie umieścić standardowej opcji specyficznej dla C.
A gdy dzieje się naprawdę źle, uzyskanie dziennika analizatora składni za pomocą tego polecenia w podmenu Indeksator może być bardzo pouczające.
źródło