Eclipse 3.7.1 CDT 1.4.1 GCC 4.6.2
Ini adalah contoh dari sepotong kode C ++ 11:
auto text = std::unique_ptr<char[]>(new char[len]);
Editor Eclipse mengeluh tentang:
Function 'unique_ptr' could not be resolved
Kompilasi Makefile berfungsi dengan baik. Bagaimana cara membuat Eclipse berhenti mengeluh tentang kesalahan semacam ini?
c++
eclipse
c++11
eclipse-cdt
Nick
sumber
sumber
std::unique_ptr<char[]>
unique_ptr<char>
menelepondelete
, yang mana yang salah karena dibuat dengannew[]
?delete
dipanggil, ketika Anda perludelete[]
dipanggil. Theunique_ptr<char>
mengasumsikan bahwa itu semakin pointer, yang akan dihapus dengandelete
.unique_ptr<char[]>
mengharapkan array, yang dihapus dengandelete[]
benar.Jawaban:
Saya menemukan artikel ini di forum Eclipse, cukup ikuti langkah-langkah itu dan berhasil untuk saya. Saya menggunakan Eclipse Indigo 20110615-0604 di Windows dengan pengaturan Cygwin.
-std=c++0x
(atau untuk versi kompiler yang lebih baru-std=c++11
di akhir. ... alih-alih GCC C ++ Compiler saya juga memiliki kompiler Cygwin__GXX_EXPERIMENTAL_CXX0X__
(pastikan untuk menambahkan dan menambahkan dua garis bawah) ke "Nama" dan biarkan "Nilai" kosong.Ada penjelasan tentang ini di Eclipse FAQ sekarang juga: Eclipse FAQ / C ++ 11 Fitur .
Pengaturan gambar gerhana
sumber
&&
.Instruksi Untuk Eclipse CDT 4.4 Luna dan 4.5 Mars
Pertama, sebelum membuat proyek, konfigurasikan parser sintaks Eclipse:
Window
->Preferences
->C/C++
->Build
->Settings
->Discovery
->CDT GCC Build-in Compiler Settings
di kotak teks berjudul
Command to get compiler specs
append-std=c++11
Sekarang Anda dapat membuat proyek, konfigurasi tergantung pada jenis proyek yang Anda buat:
Untuk proyek yang dibuat sebagai: File -> Baru -> Proyek -> C / C ++ -> Proyek C ++
Klik kanan pada proyek yang dibuat dan buka
Properties
->C/C++ Build
->Settings
->Tool Settings
->GCC C++ Compiler
->Dialect
Masukkan
-std=c++11
ke dalam kotak teks berjudulother dialect flags
atau pilihISO C++11
dariLanguage standard
drop down.Untuk proyek CMake
Hasilkan file proyek gerhana (di dalam proyek Anda)
Kemudian impor direktori yang dihasilkan ke gerhana sebagai proyek gerhana standar. Klik kanan proyek dan buka
Properties
->C/C++ General
->Preprocessor Include Paths, Marcos etc.
->Providers
aktifkan
CDT GCC Build-in Compiler Settings
dan pindahkan lebih tinggi dariContributed PathEntry Containers
(Ini penting)Langkah Umum Terakhir
kompilasi ulang, regenerasi
Project
->C/C++ Index
dan mulai ulang Eclipse.sumber
-std=c++11
adalahProject Properties -> C/C++ General -> Preprocessor Include Paths, Macros etc. -> Providers [tab] -> CDT GCC Built-in Compiler Settings -> Command used to get compiler specs:
. Tambahkan Anda-std=c++11
untuk itu. Saya menetapkannya di pengaturan ruang kerja global seperti yang disarankan, tetapi itu tidak disalin ke lokasi yang saya uraikan di atas ketika saya membuatMakefile
proyek baru .Pembaruan 2016:
Mulai gcc 6 ( perubahan ), dialek C ++ default adalah C ++ 14. Itu berarti bahwa kecuali Anda secara eksplisit membutuhkan dialek yang lebih baru atau lebih lama daripada, Anda tidak perlu melakukan apa pun dengan gerhana lagi.
Untuk Luna dan Mars
Bagian wiki komunitas ini menggabungkan jawaban dari Trismegistos;
1. Sebelum membuat proyek, konfigurasikan parser sintaks Eclipse:
Window -> Preferences -> C / C ++ -> Build -> Settings -> Discovery -> CDT GCC Build-in Pengaturan Kompiler
di kotak teks berjudul Command to get compiler append append
-std=c++14
2. Buat proyek, konfigurasi tergantung pada jenis proyek yang Anda buat:Untuk proyek yang dibuat sebagai: File -> Baru -> Proyek -> C / C ++ -> Proyek C ++
Klik kanan pada proyek yang dibuat dan buka
Properti -> C / C ++ Build -> Pengaturan -> Pengaturan Alat -> GCC C ++ Compiler -> Dialek
Masukkan
-std=c++14
ke dalam kotak teks berjudul bendera dialek lain atau pilih ISO C ++ 11 dari drop-down standar Bahasa.Sekarang ada cara baru untuk menyelesaikan ini tanpa peretasan GXX_EXPERIMENTAL.
Untuk versi terbaru : (Saat ini
Juno dan KeplerLuna ):Di bawah versi Juno yang lebih baru, pengaturannya terletak di
Project properties -> C/C++ General -> Preprocessor Include Paths, Macros etc. -> tab Providers -> CDT GCC Builtin Compiler Settings ()
.Versi lama 2012/2013:
Di bawah C / C ++ Build (pada pengaturan proyek), temukan Path Sertakan Preprocessor dan pergi ke Tab Penyedia . Batalkan pilihan semua kecuali Pengaturan Kompilator Dibangun CDT GCC. Kemudian untag Share pengaturan entri…. Tambahkan opsi -std = c ++ 11 ke kotak teks yang disebut Perintah untuk mendapatkan spesifikasi kompiler.
Pergi ke jalur dan simbol. Di bawah Simbol, klik pulihkan default , lalu terapkan.
Catatan:
Eclipse pilih-pilih untuk memukul, Anda harus melakukannya setiap kali Anda meninggalkan tab pengaturan.
[Promosi diri]: Saya menulis instruksi saya sendiri yang lebih rinci berdasarkan hal di atas. http://scrupulousabstractions.tumblr.com/post/36441490955/eclipse-mingw-builds
Terima kasih kepada pengguna
Nobody
di https://stackoverflow.com/a/13635080/1149664sumber
#ifndef __GXX_EXPERIMENTAL_CXX0X__
mengembalikan true dan kode di bawahnya tidak diuraikan. Ketika saya menambahkan__GXX_EXPERIMENTAL_CXX0X__
ke simbol proyek, array akan terselesaikan tetapi referensi proyek saya menjadi kacau. Apa yang mungkin menjadi masalah di sini?Untuk gerhana terbaru (Juno) berikut ini bekerja untuk saya, tidak perlu menyatakan
__GXX_EXPERIMENTAL_CXX0X__
pada diri saya sendiri. Ini berfungsi untuk pengindeks CDT dan sebagai parameter untuk kompiler:"nama proyek Anda" -> klik kanan -> properti:
C / C ++ Umum -> Preprocessor Sertakan Jalur, Makro dll. -> beralih ke tab bernama "Penyedia":
untuk "Konfigurasi" pilih "Lepaskan" (dan kemudian "debug")
matikan semua penyedia dan cukup pilih "Pengaturan Kompiler Bawaan CDT GCC"
hapus centang "Bagikan pengaturan entri antara proyek (penyedia global)"
di "Perintah untuk mendapatkan spesifikasi kompiler:" tambah "-std = c ++ 11" tanpa tanda kutip (dapat bekerja dengan tanda kutip juga)
tekan berlaku dan tutup opsi
membangun kembali indeks
Sekarang semua hal terkait c ++ 11 harus diselesaikan dengan benar oleh pengindeks.
win7 x64, gerhana resmi terbaru dengan cdt mingw-w64 gcc 4.7.2 dari proyek mingwbuilds di sourceforge
sumber
Saya memiliki masalah yang sama pada Eclipse Juno saya. Langkah-langkah ini memecahkan masalah:
Project -> Properties -> C/C++ General -> Path and Symbols -> Tab [Symbols]
.sumber
Untuk Eclipse CDT Kepler apa yang berhasil saya singkirkan dari
std::thread
simbol yang belum terselesaikan adalah:Pergi ke Preferences-> C / C ++ -> Build-> Pengaturan
Pilih tab Discovery
Pilih Pengaturan Kompiler Bawaan CDT GCC [Dibagikan]
Tambahkan -std = c ++ 11 ke bidang "Perintah untuk mendapatkan spesifikasi kompiler:" seperti:
Menambahkan
-std=c++11
ke proyekProperties/C/C++ Build->Settings->Tool Settings->GCC C++ Compiler->Miscellaneous->Other
Flags tidak cukup untuk Kepler, namun itu cukup untuk versi yang lebih lama seperti Helios.sumber
Saya belum bisa berkomentar, jadi saya menulis jawaban saya sendiri:
Ini terkait
__GXX_EXPERIMENTAL_CXX0X__
dan valid untuk Eclipse Juno dan CDT 8.x.Beberapa bagian dari jawaban ini sudah tercakup dalam jawaban lain tetapi saya ingin itu koheren.
Untuk membuatnya mungkin menggunakan stdc ++ 11, kita harus menambahkan flag khusus untuk compiler. Anda dapat melakukannya melalui properti proyek. Untuk mengubah properti proyek
RMB
danProject properties
atauALT + ENTER
. Kemudian C / C ++ Build -> Pengaturan -> Pengaturan Alat -> GCC C ++ Compiler -> Miscellaneous -> Flags Lainnya. Masukan -std = c ++ 11 pada akhir baris, untuk GCC itu akan terlihat seperti:-c -fmessage-length=0 -std=c++11
. Dengan menambahkan -stdc ++ 11 flag compiler (GCC) akan mendeklarasikan__GXX_EXPERIMENTAL_CXX0X__
dengan sendirinya.Pada titik ini Anda dapat membangun proyek menggunakan semua kebaikan C ++ 11.
Masalahnya adalah Eclipse memiliki parser sendiri untuk memeriksa kesalahan - itu sebabnya Anda masih mendapatkan semua kesalahan buruk di editor Eclipse, sementara pada saat yang sama Anda dapat membangun dan menjalankan proyek tanpa kesalahan. Ada cara untuk mengatasi masalah ini dengan secara eksplisit mendeklarasikan
__GXX_EXPERIMENTAL_CXX0X__
flag untuk proyek, seseorang dapat melakukan itu (seperti yang dikatakan Carsten Greiner): C / C ++ Umum -> Paths and Symbols -> Symbols -> GNU C ++. Klik "Tambah ..." dan lalu__GXX_EXPERIMENTAL_CXX0X__
(pastikan untuk menambahkan dan menambahkan dua garis bawah) ke "Nama" dan biarkan "Nilai" kosong. Dan sekarang adalah bagian tambahan yang ingin saya bahas dalam komentar untuk jawaban pertama, pergi ke: C / C ++ Umum -> Preprocessor Sertakan Path Macros dll. -> Penyedia, dan PilihCDT Managed Build Setting Entries
lalu klik BERLAKU dan kembali ke tab Entri, di bawah GNU C ++ seharusnya sekarang ada Entri Pengaturan Pengaturan Terkelola CDT memeriksa apakah di dalamnya ditentukan__GXX_EXPERIMENTAL_CXX0X__
apakah itu -> BERLAKU dan membangun kembali indeks Anda harusnya baik-baik saja pada saat ini.sumber
Saya juga mengalami beberapa masalah (Ubuntu 13.04 64-bit, g ++ - 4.8, eclipse Juno 3.8.1, CDT 6.0.0). Banyak hal yang disebutkan di atas, maaf untuk mengulanginya, tetapi juga saya kesulitan menggunakannya
sebagai bagian dari c ++ 11 (menambahkan -pthread untuk linker menyelesaikan masalah itu). Bagaimanapun, akhirnya pengaturan ini bekerja dengan baik:
Project -> Properties -> C / C ++ Build -> Settings -> Miscellaneous. Tambahkan
bendera untuk kompiler GCC dan G ++. Klik Terapkan.
Untuk tautan, jendela yang sama, Miscellaneous, bendera Linker, menambahkan
bendera. Pengaturan perpustakaan bersama, nama objek bersama, tambahkan
panji juga. Klik Terapkan.
C / C ++ Umum -> Jalur dan simbol -> Simbol TAB, GNU C ++ dipilih, Tambahkan
(Tidak bernilai)
bendera. Klik Terapkan.
C / C ++ Umum -> Preprocessor Sertakan jalur .. -> Tab Penyedia: centang
Pengaturan Kompiler bawaan CDT GCC
dan untuk "Perintah untuk mendapatkan spesifikasi kompiler", tambahkan
bendera. Hapus centang Bagikan. Klik Terapkan.
Entri Pengaturan Pembuatan Managemen CDT, periksa ini juga. Hapus centang dua lainnya. Klik Terapkan.
Kembali ke tab Entri, GNU C ++ CDT Managments Entri Pengaturan Pembuatan, sekarang Anda akan melihat ditambahkan
masuk.
Itu dia. Saat coding, mengetik
sekarang dapat menyelesaikan secara otomatis kelas utas misalnya, build seharusnya berfungsi dengan baik dan seharusnya tidak ada
saat runtime.
sumber
Project -> Properties -> C/C++ Build -> Settings -> Miscellaneous
langkah yang berhasil bagi saya. Terima kasih banyak: DSaya tidak tahu apakah hanya saya, solusi peringkat tertinggi tidak berfungsi untuk saya, versi gerhana saya hanya platform gerhana normal yang diinstal dengan menggunakan sudo apt-get install gerhana di Ubuntu. Tetapi saya menemukan solusi yang mengadopsi metode bersama baik dari solusi berperingkat tertinggi dan yang kedua, apa yang saya lakukan untuk membuatnya bekerja dijelaskan sebagai berikut (Perhatikan bahwa langkah-langkah lain seperti membuat proyek C ++ dll diabaikan untuk kesederhanaan)
Setelah Anda membuat proyek C ++
(1) C / C ++ Umum -> Jalur dan Simbol -> Simbol -> GNU C ++. Klik "Tambah ..." dan rekatkan GXX_EXPERIMENTAL_CXX0X (pastikan untuk menambahkan dan menambahkan dua garis bawah) ke "Nama" dan biarkan "Nilai" kosong.
(2) Di bawah C / C ++ Build (pada pengaturan proyek), temukan Path Sertakan Preprosesor dan buka Tab Penyedia. Batalkan pilihan semua kecuali Pengaturan Kompilator Dibangun CDT GCC. Kemudian untag Share pengaturan entri…. Tambahkan opsi -std = c ++ 11 ke kotak teks yang disebut Perintah untuk mendapatkan spesifikasi kompiler
Setelah melakukan langkah-langkah di atas 2 dan 2 saja, itu berhasil, gerhana dapat menyelesaikan unique_ptr, saya tidak tahu mengapa solusi ini bekerja, berharap dapat membantu orang.
sumber
Eclipse C / C ++ tidak mengenali simbol
std::unique_ptr
meskipun Anda telah menyertakan header memori C ++ 11 dalam file Anda.Dengan asumsi Anda menggunakan kompiler GNU C ++, inilah yang saya lakukan untuk memperbaikinya:
Project -> Properties -> C / C ++ Umum -> Preprocessor Include Paths -> GNU C ++ -> Entri Pengaturan Pengguna CDT
Klik pada tombol "Tambah ..."
Pilih "Preprocessor Macro" dari menu dropdown
Tekan Apply, dan kemudian OK untuk kembali ke proyek Anda
Kemudian bangun kembali indeks C ++ Anda: Proyek -> C / C ++ Indeks -> Rebuild
sumber
Bagi saya di Eclipse Neon saya mengikuti jawaban Trismegistos di atas , BELUM saya juga menambahkan langkah tambahan:
Tekan berlaku dan OK.
Bersulang,
Orang.
sumber
sumber
Baik hack maupun versi cleaner tidak berfungsi untuk Indigo. Peretasan diabaikan, dan opsi konfigurasi yang diperlukan tidak ada. Tanpa alasan yang jelas, build mulai bekerja setelah tidak bekerja dan tidak memberikan alasan yang bermanfaat mengapa. Setidaknya dari baris perintah, saya mendapatkan hasil yang dapat direproduksi.
sumber
Untuk mendapatkan dukungan untuk C ++ 14 di Eclipse Luna, Anda bisa melakukan langkah-langkah ini:
C++ General -> Preprocessor Include -> Providers -> CDT Cross GCC Built-in Compiler Settings
, tambahkan "-std = c ++ 14"C++ Build -> Settings -> Cross G++ Compiler -> Miscellaneous
, tambahkan "-std = c ++ 14"Reindex proyek Anda dan akhirnya restart Eclipse. Itu harus bekerja seperti yang diharapkan.
sumber
Saya menyelesaikannya dengan cara ini pada Mac. Saya menggunakan Homebrew untuk menginstal versi terbaru gcc / g ++. Mereka mendarat di / usr / local / bin dengan menyertakan di / usr / local / termasuk.
Saya CD ke / usr / local / bin dan membuat symlink dari g ++ @ 7 apapun menjadi g ++ menyebabkan @ bit itu mengganggu.
Lalu saya pergi ke MyProject -> Properties -> C / C ++ Build -> Settings -> GCC C ++ Compiler dan mengubah perintah dari "g ++" menjadi "/ usr / local / bin / g ++". Jika Anda memutuskan untuk tidak membuat tautan simbolik, Anda bisa lebih spesifik.
Lakukan hal yang sama untuk penghubung.
Terapkan dan Terapkan dan Tutup. Biarkan itu membangun kembali indeks. Untuk sementara, itu menunjukkan sejumlah kesalahan yang menakutkan, tapi saya pikir itu sementara membangun indeks. Sementara saya mencari tahu kesalahannya, semuanya menghilang tanpa tindakan lebih lanjut.
Saya pikir tanpa memverifikasi bahwa Anda juga bisa masuk ke Eclipse -> Properties -> C / C ++ -> Core Build Toolchains dan mengeditnya dengan jalur yang berbeda, tapi saya tidak yakin apa yang akan dilakukan.
sumber
Saya memiliki masalah yang sama menggunakan Eclipse C ++ 2019-03 untuk proyek campuran C dan C ++ yang menggunakan std :: opsional dan std :: swap. Apa yang berhasil untuk saya adalah ini. Dalam proyek Properties-> C / C ++ Build-> Settings-> Tool Settings-> Cross G ++ Compiler, hapus -std = gnu ++ 17 dari Miscellaneous dan letakkan di Dialect-> Other Dialect Flags.
sumber
Saat menggunakan kompiler silang, saya sering mendapatkan sistem build custom canggih yang dibuat dengan cermat oleh rekan kerja. Saya menggunakan "Proyek Makefile dengan kode yang ada" sehingga sebagian besar jawaban lain tidak berlaku.
Pada awal proyek, saya harus menentukan bahwa saya menggunakan kompiler silang dalam panduan untuk "Proyek Makefile dengan Kode yang Ada". Yang mengganggu adalah bahwa dalam 10 tahun terakhir, tombol kompiler silang pada wizard itu tidak menanyakan di mana kompiler silang berada. Jadi dalam langkah yang memperbaiki masalah C ++ dan masalah cross compiler, saya harus pergi ke tab provider seperti yang disebutkan oleh jawaban seperti @ravwojdyla di atas, tetapi penyedia yang harus saya pilih adalah penyedia cross-compiler. Kemudian di kotak perintah saya meletakkan path lengkap ke kompiler dan saya menambahkan -std = gnu ++ 11 untuk standar C ++ yang saya ingin memiliki dukungan untuk. Ini berhasil dan bisa diharapkan.
Anda dapat melakukan ini pada proyek yang ada. Satu-satunya hal yang perlu Anda lakukan adalah menjalankan kembali pengindeks.
Saya tidak pernah menambahkan flag eksperimental atau menimpa definisi __cplusplus. Satu-satunya hal adalah, jika saya memiliki sejumlah besar kode C modern, saya tidak punya tempat untuk menempatkan opsi standar khusus-C.
Dan ketika semuanya berjalan sangat buruk, mendapatkan parser log, menggunakan perintah itu di submenu Indexer, bisa sangat informatif.
sumber