วิธีเปิดใช้งาน C ++ 11 ใน Eclipse Juno / Kepler / Luna CDT


85

แก้ไข: ปรากฎว่านี่ไม่ใช่เรื่องเฉพาะสำหรับ Eclipse Kepler ฉันต้องใช้กระบวนการเดียวกันสำหรับ Eclipse Juno ปัญหาคือดูเหมือนว่าจะไม่มีขั้นตอนในโพสต์อื่นที่ตอบคำถามเดียวกันนี้

ฉันใช้ Eclipse Kepler สำหรับ C ++ และฉันพยายามใช้ C ++ 11 และได้รับข้อผิดพลาด เมื่อฉันรวบรวมฉันได้รับข้อผิดพลาด

ข้อผิดพลาด: ไม่อนุญาตให้ใช้ range-based-สำหรับลูปในโหมด C ++ 98

ฉันทำตามคำแนะนำจากโพสต์แล้ว

รองรับ Eclipse CDT C ++ 11 / C ++ 0x

และวิธีแก้ปัญหาสำหรับ Eclipse Juno ไม่ทำงาน

ความคิดเห็นที่แตกต่างได้แนะนำให้รีสตาร์ทคราสและทำความสะอาดและสร้างใหม่ นั่นไม่ได้สร้างความแตกต่าง

คำตอบ:


183

มีสองสิ่งที่คุณต้องทำก่อนอื่นคุณต้องตั้งค่าคอมไพเลอร์ของคุณจากนั้นคุณต้องตั้งค่าตัวประมวลผลภาษาของ CDT เนื่องจากคุณไม่ได้ระบุว่าคุณกำลังใช้คอมไพเลอร์ตัวใดฉันจะถือว่าเป็น GCC แต่ขั้นตอนจะคล้ายกับคอมไพเลอร์อื่น (โปรดทราบว่าคุณต้องมีคอมไพเลอร์ที่รองรับ C ++ 11 แน่นอน)

การตั้งค่าคอมไพเลอร์ค่อนข้างตรงไปตรงมา:

  1. คลิกขวาที่โครงการของคุณแล้วคลิกคุณสมบัติ
  2. ภายใต้สร้าง C / C ++ คลิกการตั้งค่า
  3. ภายใต้ GCC C ++ Compiler ให้คลิก Miscellaneous
  4. ในกล่องค่าสถานะอื่น ๆ ให้ต่อท้าย "-std = c ++ 11" ในรายการโทเค็น
  5. คลิกใช้และตกลง

ณ จุดนี้คุณควรจะสามารถสร้างโปรเจ็กต์ของคุณใหม่และทำให้มันทำงานได้ แต่ CDT ยังอาจแสดงข้อผิดพลาดสำหรับ C ++ 11 รวมถึง นี่คือวิธีที่คุณสามารถแก้ไขได้:

  1. คลิกขวาที่โครงการของคุณแล้วคลิกคุณสมบัติ
  2. ภายใต้ C / C ++ General คลิก "Preprocessor Include Paths, Macros"
  3. เลือกแท็บผู้ให้บริการ
  4. ควรมีรายการที่ระบุว่า "GCC Built in Compiler Settings" เลือกรายการนี้
  5. ยกเลิกการเลือกตัวเลือก "ใช้ผู้ให้บริการทั่วโลก ... "
  6. ใต้รายการมีช่องที่ระบุว่า "Command to get compiler specification" ต่อท้าย "-std = c ++ 0x"
  7. ย้ายผู้ให้บริการ "GCC Built in Compiler Settings" ที่ด้านบนสุดของรายการโดยใช้ปุ่ม "Move Up" ทางด้านขวา
  8. คลิกใช้แล้วตกลง
  9. กลับไปที่เวิร์กสเปซ Eclipse ของคุณเลือกเมนูโครงการดัชนี C / C ++ แล้วคลิก "แก้ไขปัญหารวมที่ไม่ได้แก้ไขอีกครั้ง"

1
ขอขอบคุณ. สิ่งนี้ได้ผล บางทีฉันอาจจะอ่านผิดโพสต์อื่นที่ฉันเชื่อมโยงไป แต่ดูเหมือนว่าจะไม่มีการพูดถึงการตั้งค่าคอมไพเลอร์ในโพสต์นั้น
user327301

1
ไม่ได้ผลสำหรับฉัน ปัญหาหลักของฉันคือ c ++ 11 ที่ยังไม่ได้รับการแก้ไข ฉันใส่-std=c++11ในที่ที่คุณบอกว่าจะใส่และสร้างดัชนีแบบเต็มขึ้นมาใหม่ก็ยังคงแสดงให้เห็นว่า std :: cout, std :: set, ฯลฯ ...
Dolanor

2
แก้ไข: ฉันไม่พบส่วนแรกในที่ที่ควร แต่กำลังรวบรวมผ่าน make ดังนั้นจึงอาจเป็นคำอธิบายได้ (ฉันพบมันในการกำหนดค่าพื้นที่ทำงานและตั้งค่าไว้) แต่ใส่เข้าไปแล้วก็compiler specยังใช้ไม่ได้ std :: shared_ptr และไม่รู้จัก แม้ว่าจะเคยทำงานกับเครื่องรุ่นเก่ากับจูโน
Dolanor

1
ในกรณีของฉัน (gcc) ฉันใช้ -std = c ++ 0x ดังนั้นทุกอย่างกำลังทำงาน ขอขอบคุณ!
Denis Zaikin

4
@MrEricSir มีวิธีตั้งค่านี้สำหรับพื้นที่ทำงานหรือไม่เมื่อฉันเพิ่มโปรเจ็กต์ใหม่มันจะถูกนำไปใช้โดยอัตโนมัติด้วยหรือไม่
Ivaylo Strandjev

25

รองรับ C ++ 11 ใน Eclipse Kepler Service Release 1 (Build id: 20130919-0819)

ใน Eclipse Kepler SR1 รีลีสล่าสุดคุณต้องเพิ่ม-std = c ++ 11 เท่านั้น

  1. คลิกขวาที่โครงการของคุณแล้วคลิกคุณสมบัติ
  2. ไปที่C / C ++ GeneralและPreprocessor รวม Paths, Macros เป็นต้น
  3. เลือกแท็บผู้ให้บริการ
  4. เพิ่ม-std = c ++ 11ไปยังCommand เพื่อรับข้อมูลจำเพาะของคอมไพเลอร์:
  5. ใช้การเปลี่ยนแปลงดัชนีควรถูกสร้างขึ้นโดยอัตโนมัติ

"คำสั่งที่จะได้รับรายละเอียดคอมไพเลอร์:"บรรทัดควรมีลักษณะดังนี้:

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

2
ด้วย GCC ฉันต้องเพิ่ม -std = c ++ 0x
ccook

คุณใช้ GCC ใด c ++ 0X เป็นชื่อเก่า (นามแฝง) สำหรับ C ++ 11
MeJ

1
พบว่านี่เป็นครั้งที่สองในการตั้งค่า CDT ใหม่ของคราส - การตั้งค่านี้ควรใช้งานง่ายขึ้น
ccook


6

ฉันใช้ Eclipse Kepler และเพื่อแก้ไขฉันทำสิ่งนี้:

1 - คลิกขวาที่ Project >> Proprietes >> C / C ++ Build :: Settings

2 - ไปที่คอมไพเลอร์ GCC G ++ >> เบ็ดเตล็ด >> ธงอื่น ๆ

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

นั่นช่วยแก้ปัญหาของฉัน!

ฉันหวังว่ามันจะช่วยได้!


นี่คือคำตอบที่ดีที่สุดสำหรับ Eclipse Platform เวอร์ชัน: 4.3.1 - ไม่รู้ว่า Kepler / Juno คืออะไร!
TCSGrad

Eclipse Kepler คือ Eclipse เวอร์ชัน 4.3.X
Karrq

4

เรียกใช้ eclipse indigo และ cdt 8.0.2 ที่นี่ ฉันทำตามคำแนะนำทั้งหมด แต่ก็ยังจำเป็นต้องตั้งค่าตัวประมวลผลก่อนกำหนดด้วยมือเพื่อค้นหาสิ่งต่างๆเช่น std :: unique_ptr ไฟล์รวม "หน่วยความจำ" จะตรวจสอบสิ่งนี้ ตั้งค่า __cplusplus เป็น 201103L บนแท็บ "Symbols" ภายใต้ "Paths and Symbols" ใน "C ++ General" ในคุณสมบัติโครงการ


ใช่ใช้ได้กับการย้ายข้อมูลจากโครงการเก่า
Guy L

2

การเพิ่มค่าสถานะภาษาถิ่น "-std = c ++ 11" ไปยังคุณสมบัติโครงการ -> สร้าง C / C ++ -> การตั้งค่า -> การตั้งค่าเครื่องมือ (คอมไพเลอร์ GCC C ++ -> ภาษาถิ่น) ช่วยแก้ปัญหาของฉันใน Eclipse Kepler นอกเหนือจากการตั้งค่าที่ระบุไว้ข้างต้น


1

ฉันใช้ Eclipse Luna และไม่มี "การตั้งค่าเครื่องมือ" ใน C / C ++ Build -> Settings ฉันDIDเพิ่ม -std = C ++ 11 ถึงบรรทัดคำสั่งคอมไพเลอร์รายละเอียดภายใต้ "C / C ++ ทั่วไป -> Preprocessor รวม -> ผู้ให้บริการ" ตามข้อเสนอแนะ แต่นั่นยังไม่เป็นไปตามความสามารถของผู้จัดทำดัชนีในการแก้ไข emplace ()

ดังนั้นฉันจึงดูในไฟล์ส่วนหัวและพบว่าฟังก์ชัน emplace ขึ้นอยู่กับ __cplusplus> = 201103L ผมจึงเพิ่มสัญลักษณ์พรีโปรเซสเซอร์ "__cplusplus" และให้ค่า 201103

ค่อนข้างแฮ็ค แต่ตัวสร้างดัชนีมีความสุข (และ makefiles กำหนดแฟล็กบิลด์ของฉันไม่ใช่โปรเจ็กต์ eclipse)


0

โซลูชันที่จัดหาโดย MrEricSir จะใช้งานได้หลังจากติดตั้ง Eclipse Oxygen CDT ล่าสุดแล้วเท่านั้น มันใช้ไม่ได้สำหรับฉันกับ Mars CDT

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.