Eclipse Juno / Kepler / Luna CDT'de C ++ 11 nasıl etkinleştirilir?


85

DÜZENLEME: Görünüşe göre bu gerçekten Eclipse Kepler'e özgü değil. Eclipse Juno için aynı işlemi kullanmak zorunda kaldım. Sorun, aynı soruyu yanıtlayan diğer gönderilerde eksik adımlar olmasıydı.

C ++ için Eclipse Kepler kullanıyorum ve C ++ 11 kullanmaya çalışıyorum ve hata alıyorum. Derlediğimde hata alıyorum

hata: aralık tabanlı döngülere C ++ 98 modunda izin verilmez

Gönderideki talimatları takip ettim

Eclipse CDT C ++ 11 / C ++ 0x desteği

ve Eclipse Juno için verilen çözüm çalışmıyor.

Farklı yorumlar tutulmanın yeniden başlatılmasını, temizlenip yeniden inşa edilmesini önerdi. Bu bir fark yaratmadı.

Yanıtlar:


183

Yapmanız gereken iki şey var, önce derleyicinizi kurmanız, ardından CDT'nin dil işlemcisini kurmanız gerekir. Hangi derleyiciyi kullandığınızı belirtmediğiniz için, bunun GCC olduğunu varsayacağım, ancak adımlar diğer derleyiciler için benzer olacaktır. (Elbette C ++ 11'i destekleyen bir derleyiciye ihtiyacınız olduğunu unutmayın.)

Derleyiciyi kurmak oldukça basittir:

  1. Projenize sağ tıklayın ve Özellikler'e tıklayın
  2. C / C ++ Build altında Ayarlar'a tıklayın
  3. GCC C ++ Compiler altında Miscellaneous'a tıklayın
  4. Diğer Bayraklar kutusunda, belirteç listesine "-std = c ++ 11" ekleyin.
  5. Uygula ve Tamam'ı tıklayın

Bu noktada projenizi yeniden inşa edebilmeli ve çalıştırabilmelisiniz. Ancak CDT, C ++ 11 içeriği için hala hatalar gösterebilir. Bunu şu şekilde çözebilirsiniz:

  1. Projenize sağ tıklayın ve Özellikler'e tıklayın
  2. C / C ++ Genel altında "Önişlemci Yolları, Makroları Dahil Et" seçeneğini tıklayın
  3. Sağlayıcılar sekmesini seçin
  4. Listede "GCC Yerleşik Derleyici Ayarları" gibi bir şey yazan bir öğe olmalıdır. Bu girişi seçin.
  5. "Global sağlayıcıyı kullan ..." seçeneğinin işaretini kaldırın
  6. Listenin altında "Derleyici özelliklerini alma komutu" yazan bir kutu var. Buna "-std = c ++ 0x" ekleyin.
  7. Sağdaki 'Yukarı Taşı' düğmesini kullanarak "GCC Yerleşik Derleyici Ayarları" sağlayıcısını listenin en üstüne taşıyın.
  8. Uygula'yı ve ardından Tamam'ı tıklayın.
  9. Eclipse çalışma alanınıza geri dönün, Proje Menüsü, C / C ++ Dizini'ni seçin ve "Çözümlenmemiş içeriği yeniden çözümle" yi tıklayın.

1
Teşekkür ederim. Bu işe yaradı. Belki bağlantı verdiğim diğer gönderiyi yanlış okudum, ancak bu yazıda derleyicinin kurulmasından bahsedilmiyor gibi görünüyor.
user327301

1
Benim için çalışmıyor. Benim ana sorunum çözülmemiş c ++ 11'in içermesi. Ben koymak -std=c++11sen koymak ve tam indeksi yeniden inşa söylenen nerede, hala ... vb tanınmayan std :: cout, std :: set crapload gösterir
Dolanor

2
DÜZENLEME: İlk bölümü olması gereken yerde bulamadım, ancak make aracılığıyla derliyorum, bu yüzden bir açıklama olabilir. (Yine de çalışma alanı yapılandırmasında buldum ve ayarladım). Ama onu içine koydum compiler specve hala çalışmıyor. std :: shared_ptr ve aynısı tanınmadı. Eskiden juno ile eski makinede çalışıyordu.
Dolanor

1
Benim durumumda (gcc) -std = c ++ 0x kullandım. Yani her şey çalışıyor. Teşekkür ederim!
Denis Zaikin

4
@MrEricSir, bu ayarı çalışma alanı için yapmanın bir yolu var mı, böylece yeni bir proje eklediğimde otomatik olarak ona da uygulanır?
Ivaylo Strandjev

25

Eclipse Kepler Service Release 1'de C ++ 11 desteği (Derleme kimliği: 20130919-0819)

En son sürüm Eclipse Kepler SR1'de sadece -std = c ++ 11 eklemelisiniz

  1. Projenize sağ tıklayın ve Özellikler'e tıklayın
  2. C / C ++ Genel ve Ön İşlemciye Yolları, Makroları vb. Dahil Et seçeneğine gidin .
  3. Sağlayıcılar sekmesini seçin
  4. Ekle -std = c 11 ++ için Komutanlığı derleyici gözlük almak için:
  5. Değişiklikleri uygulayın, Dizin otomatik olarak oluşturulmalıdır.

"Komut derleyici gözlük almak için:" line gibi görünmelidir:

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

2
GCC I = c ++ 0x -std eklemek zorunda ile
ccook

Hangi GCC'yi kullanıyorsunuz? c ++ 0X, C ++ 11'in eski adıydı (takma ad)
MeJ

1
Bunu ikinci kez yeni bir tutulma CDT'si kurarken buldum - bunu ayarlamak daha sezgisel olmalı.
ccook


6

Eclipse Kepler kullanıyorum ve düzeltmek için şunu yaptım:

1 - Projeye Sağ Tıkla >> Mülkler >> C / C ++ Yapısı :: Ayarlar

2 - GCC G ++ Derleyicisine Gitti >> Çeşitli >> Diğer Bayraklar

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

Bu benim sorunumu çözdü!

Umarım yardımcı olmuştur!


Bu Eclipse Platformu için en iyi cevap, Sürüm: 4.3.1 - Kepler / Juno'nun ne olduğunu bilmiyorum!
TCSGrad

Eclipse Kepler, Eclipse Sürüm 4.3.X'tir
Karrq

4

Eclipse indigo ve cdt 8.0.2 burada çalıştırılıyor. Tüm kılavuzları takip ettim, ancak std :: unique_ptr gibi şeyleri bulmak için önişlemciyi elle tanımlamam gerekiyordu. Dahil etme dosyası "bellek" bunu kontrol eder. Proje özelliklerinde "C ++ Genel" bölümünde "Yollar ve Semboller" altındaki "Semboller" sekmesinde __cplusplus'ı 201103L olarak ayarlayın.


Evet, eski projelerden geçişler için çalışıyor.
Guy L

2

Project properties-> C / C ++ Build -> Settings -> Tool settings (GCC C ++ Compiler -> Dialect) 'a lehçe bayrağı "-std = c ++ 11" eklemek, yukarıda belirtilen ayarlar dışında Eclipse Kepler'daki sorunumu çözdü.


1

Eclipse Luna kullanıyorum ve C / C ++ Oluşturma -> Ayarlar altında "Araç Ayarları" yok. Ben DID eklenti -std = c ++ altında derleyici özellikleri komut satırına 11 "C / C ++ Genel -> Preprocessor içerir -> Sağlayıcıları" önerildiği gibi. Ancak bu yine de indeksleyicimin implace () çözümleme yeteneğini tatmin etmedi.

Böylece üstbilgi dosyasına baktım ve yerleştirme işlevlerinin __cplusplus> = 201103L'ye bağlı olduğunu buldum. Bu yüzden önişlemci sembolünü "__cplusplus" ekledim ve ona 201103 değerini verdim.

Biraz hilekar ama indeksleyici mutlu. (Ve makefiles benim yapı bayraklarımı tanımlar, tutulma projesini değil)


0

MrEricSir tarafından sağlanan çözüm ancak en son Eclipse Oxygen CDT kurulduktan sonra çalışır. Mars CDT ile benim için çalışmıyor.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.