วิธีเปิดใช้งานการสนับสนุน C ++ 11 / C ++ 0x ใน Eclipse CDT


210

Eclipse 3.7.1 CDT 1.4.1 GCC 4.6.2

นี่คือตัวอย่างของรหัส C ++ 11:

auto text = std::unique_ptr<char[]>(new char[len]);

เอดิเตอร์ Eclipse บ่นเกี่ยวกับ:

Function 'unique_ptr' could not be resolved

การรวบรวม Makefile ทำงานได้ดี จะทำให้ Eclipse หยุดบ่นเกี่ยวกับข้อผิดพลาดประเภทนี้ได้อย่างไร


12
อย่างน้อยที่สุดมันควรจะเป็นstd::unique_ptr<char[]>
Cubbi

ไม่แน่ใจว่าถูกต้อง - ถ่าน [] สามารถแปลงเป็นถ่าน * และ unique_ptr <char> เป็นตัวชี้ไปยังถ่านเช่นถ่าน *
Nick

1
จะไม่unique_ptr<char>โทรdeleteซึ่งเป็นสิ่งที่ผิดตั้งแต่มันถูกสร้างขึ้นด้วยnew[]?
Dietrich Epp

6
@Nick: ไม่เขาพูดถูก วิธีที่คุณเขียนมันจะทำให้deleteถูกเรียกเมื่อคุณต้องการ delete[]เรียก สันนิษฐานว่ามันได้รับตัวชี้ซึ่งได้รับการลบด้วยunique_ptr<char> คาดว่าอาร์เรย์ซึ่งจะถูกลบด้วยอย่างถูกต้อง deleteunique_ptr<char[]>delete[]
Nicol Bolas

คำตอบ:


224

ฉันพบนี้บทความในฟอรั่ม Eclipse เพียงทำตามขั้นตอนเหล่านั้นและการทำงานสำหรับฉัน ฉันใช้ Eclipse Indigo 20110615-0604 บน Windows ด้วยการตั้งค่า Cygwin

  • สร้างโครงการ C ++ ใหม่
  • ตัวเลือกเริ่มต้นสำหรับทุกสิ่ง
  • เมื่อสร้างเสร็จแล้วให้คลิกขวาที่โครงการและไปที่ "คุณสมบัติ"
  • สร้าง C / C ++ -> การตั้งค่า -> การตั้งค่าเครื่องมือ -> คอมไพเลอร์ GCC C ++ -> เบ็ดเตล็ด -> ธงอื่น ๆ วาง-std=c++0x(หรือสำหรับคอมไพเลอร์รุ่นใหม่กว่า-std=c++11ในตอนท้าย.) แทนที่จะเป็น GCC C ++ Compiler ฉันมี Cygwin compiler ด้วย
  • C / C ++ ทั่วไป -> เส้นทางและสัญลักษณ์ -> สัญลักษณ์ -> GNU C ++ คลิก "เพิ่ม ... " และวาง__GXX_EXPERIMENTAL_CXX0X__(ตรวจสอบให้แน่ใจว่าได้ผนวกและขีดล่างสองอัน) ไว้ใน "ชื่อ" และปล่อยว่างไว้ "ค่า"
  • กดใช้ทำสิ่งที่ขอให้คุณทำแล้วกดตกลง

มีคำอธิบายในเรื่องนี้คราสคำถามที่พบบ่อยคือตอนนี้เช่นกัน: Eclipse คำถามที่พบบ่อย / C ++ 11 คุณสมบัติ

การตั้งค่าภาพ Eclipse


2
ใช่มันใช้งานได้! แต่ให้แน่ใจว่าได้เพิ่ม & เพิ่มขีดล่างสองอันใน GXX_EXPERIMENTAL_CXX0X - ฉันจะยอมรับสิ่งนี้ในระหว่างนี้
Nick

5
นี่เป็นการลบข้อผิดพลาดตัวแก้ไขปลอมหรือไม่ ฉันไม่มีปัญหาในการคอมไพล์และมีการรับรู้ชนิด std ใหม่ แต่ฉันไม่สามารถกำจัดข้อผิดพลาดทางไวยากรณ์ของเอดิเตอร์สำหรับช่วงที่อ้างอิงลูปและการอ้างอิง rvalue &&ได้
juanchopanza

7
คำถามติดตามที่เป็นธรรมชาติตอนนี้กลายเป็น: เราสามารถเพิ่มประสิทธิภาพเวิร์กโฟลว์ของเราโดยบันทึกการตั้งค่าโครงการ C ++ เฉพาะเหล่านี้ลงในเทมเพลตโครงการ Eclipse ใหม่ว่า "โครงการ C ++ 11" ได้หรือไม่
Nordlöw

38
หมายเหตุ: สำหรับทุกคนที่กำลังมองหาคำตอบสำหรับจูโนนี้ไม่ได้ทำงาน
Christopher

4
สำหรับเคปเลอร์ / จูโน่พบคำตอบในคำตอบนี้ มันโพสต์ในการแก้ไขการตอบกลับของ Johan Lundberg ด้านล่าง แต่ฉันสังเกตได้ที่นี่เช่นกันเพื่อให้คำตอบที่ยอมรับนั้นสมบูรณ์ยิ่งขึ้น
Lumièreที่ใช้งานไม่ได้

150

คำแนะนำสำหรับ Eclipse CDT 4.4 Luna และ 4.5 ​​Mars

ก่อนอื่นก่อนสร้างโครงการกำหนดค่าตัวแยกวิเคราะห์ไวยากรณ์ Eclipse:

Window-> Preferences-> C/C++-> Build-> Settings-> Discovery->CDT GCC Build-in Compiler Settings

ในกล่องข้อความชื่อCommand to get compiler specsผนวก-std=c++11

ตอนนี้คุณสามารถสร้างโครงการการกำหนดค่าขึ้นอยู่กับประเภทของโครงการที่คุณสร้าง:

สำหรับโครงการที่สร้างขึ้นเป็น: ไฟล์ -> ใหม่ -> โครงการ -> C / C ++ -> โครงการ C ++

คลิกขวาที่โครงการที่สร้างและเปิด

Properties-> C/C++ Build-> Settings-> Tool Settings-> GCC C++ Compiler->Dialect

ใส่-std=c++11ลงในกล่องข้อความชื่อother dialect flagsหรือเลือกISO C++11จากรายการLanguage standardแบบหล่นลง

สำหรับโครงการ CMake

สร้างไฟล์โครงการ eclipse (ภายในโครงการของคุณ)

mkdir build
cd build
cmake -G"Eclipse CDT4 - Unix Makefiles" -D CMAKE_BUILD_TYPE=Debug ..

จากนั้นอิมพอร์ตไดเร็กทอรีที่สร้างไปยัง eclipse เป็นโปรเจ็กต์ eclipse มาตรฐาน คลิกขวาที่โครงการและเปิด

Properties-> C/C++ General-> Preprocessor Include Paths, Marcos etc.->Providers

เปิดใช้งานCDT GCC Build-in Compiler Settingsและย้ายสูงกว่าContributed PathEntry Containers(สิ่งนี้สำคัญ)

ขั้นตอนทั่วไปสุดท้าย

recompile สร้างใหม่Project-> C/C++ Indexและรีสตาร์ท Eclipse


1
ทำงานได้อย่างสมบูรณ์แบบแม้ไม่ต้องรีสตาร์ทคราส ขอบคุณ.
prasannak

ขอบคุณ. ไม่มีคำตอบอื่นสำหรับฉันที่ Luna
Mohamed El-Nakib

ยังคงทำงานบนดาวอังคาร มากกว่าคำตอบที่ยอดเยี่ยม! ถ้าฉันทำได้เพียงโหวตคำตอบนี้สองครั้ง!
Mohamed El-Nakib

ขอบคุณ! นี่เป็นคำตอบที่เป็นประโยชน์ที่สุดสำหรับปัญหาที่ฉันพบ (4.5)
AturSams

2
สำหรับ Eclipse Neon.3 กับโครงการ c ++ Makefile, การตั้งค่าของโครงการที่จะเพิ่มการเป็น-std=c++11 Project Properties -> C/C++ General -> Preprocessor Include Paths, Macros etc. -> Providers [tab] -> CDT GCC Built-in Compiler Settings -> Command used to get compiler specs:ผนวกคุณ-std=c++11เข้ากับสิ่งนั้น ฉันตั้งค่าไว้ในการตั้งค่าพื้นที่ทำงานทั่วโลกตามที่แนะนำ แต่ไม่ได้คัดลอกไปยังตำแหน่งที่ฉันอธิบายไว้ข้างต้นเมื่อฉันสร้างMakefileโครงการใหม่
BeeOnRope

112

อัปเดตปี 2559:

ตั้งแต่gcc 6 ( เปลี่ยนแปลง ), ภาษา C ++ เริ่มต้นคือ C ++ 14 นั่นหมายความว่าหากคุณไม่ต้องการภาษาถิ่นที่ใหม่กว่าหรือชัดเจนกว่าคุณไม่จำเป็นต้องทำอะไรกับ eclipse อีกต่อไป

สำหรับ Luna และ Mars

ส่วน wiki ชุมชนนี้รวมคำตอบโดย Trismegistos

1. ก่อนสร้างโครงการกำหนดค่าตัวแยกวิเคราะห์ไวยากรณ์ Eclipse:

หน้าต่าง -> การตั้งค่า -> C / C ++ -> Build -> การตั้งค่า -> การค้นพบ -> การตั้งค่าคอมไพเลอร์ Build-in CDT GCC

ในกล่องข้อความชื่อ Command เพื่อรับข้อมูลจำเพาะคอมไพเลอร์ต่อท้าย-std=c++14 2 สร้างโปรเจ็กต์การกำหนดค่าขึ้นอยู่กับชนิดของโปรเจ็กต์ที่คุณสร้าง:

สำหรับโครงการที่สร้างขึ้นเป็น: ไฟล์ -> ใหม่ -> โครงการ -> C / C ++ -> โครงการ C ++

คลิกขวาที่โครงการที่สร้างและเปิด

คุณสมบัติ -> สร้าง C / C ++ -> การตั้งค่า -> การตั้งค่าเครื่องมือ -> คอมไพเลอร์ GCC C ++ -> ภาษา

ใส่-std=c++14ลงในกล่องข้อความที่ตั้งชื่อภาษาถิ่นอื่นหรือเลือก ISO C ++ 11 จากดรอปดาวน์มาตรฐานภาษา

ตอนนี้มีวิธีใหม่ในการแก้ไขปัญหานี้โดยไม่ต้องแฮ็ค GXX_EXPERIMENTAL

สำหรับรุ่นล่าสุด : (ปัจจุบันJuno และ Kepler Luna ):

Project properties -> C/C++ General -> Preprocessor Include Paths, Macros etc. -> tab Providers -> CDT GCC Builtin Compiler Settings ()ภายใต้รุ่นใหม่ของจูโนการตั้งค่าจะอยู่ที่

รุ่นที่เก่ากว่า 2012/2013:

  1. ภายใต้การสร้าง C / C ++ (ที่การตั้งค่าโครงการ) ค้นหาเส้นทางรวมตัวประมวลผลล่วงหน้าและไปที่แท็บผู้ให้บริการ ยกเลิกการเลือกทั้งหมดยกเว้นการตั้งค่าคอมไพเลอร์ในตัว CDT GCC จากนั้นยกเลิกการแชร์รายการการตั้งค่า…. เพิ่มตัวเลือก -std = c ++ 11ลงในกล่องข้อความชื่อ Command เพื่อรับข้อมูลจำเพาะคอมไพเลอร์

  2. ไปที่เส้นทางและสัญลักษณ์ ภายใต้สัญลักษณ์ให้คลิกคืนค่าเริ่มต้นแล้วนำไปใช้


หมายเหตุ:

Eclipse เป็นเรื่องเกี่ยวกับการกดปุ่มคุณต้องทำทุกครั้งที่ออกจากแท็บการตั้งค่า

[การโปรโมตตนเอง]: ฉันเขียนคำแนะนำโดยละเอียดของตัวเองตามที่กล่าวไว้ข้างต้น http://scrupulousabstractions.tumblr.com/post/36441490955/eclipse-mingw-builds

ขอบคุณผู้ใช้Nobodyที่https://stackoverflow.com/a/13635080/1149664


3
ขอบคุณ แต่มันไม่ได้ช่วยให้ฉันแก้ปัญหาการอ้างอิง c ++ 11 ได้ โปรแกรมคอมไพล์อย่างถูกต้อง แต่ eclipse ไม่สามารถแก้ไขได้ เมื่อฉันตรวจสอบ "อาร์เรย์" #ifndef __GXX_EXPERIMENTAL_CXX0X__ผลตอบแทนจริงและรหัสด้านล่างจะไม่แยกวิเคราะห์ เมื่อฉันเพิ่ม__GXX_EXPERIMENTAL_CXX0X__สัญลักษณ์โครงการอาร์เรย์จะได้รับการแก้ไข แต่การอ้างอิงของโครงการของฉันสับสน สิ่งที่อาจเป็นปัญหาที่นี่?
Halil Kaskavalci

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

1
@HalilKaskavalci ฉันพบข้อผิดพลาดเดียวกันนี้ หากฉันตั้งค่าตัวแก้ไขสำหรับ c ++ 11 ตัววนซ้ำไม่สามารถแก้ไขได้ ถ้าฉันทำไม่ได้มาตรฐาน :: unique_ptr ไม่สามารถแก้ไขได้ น่ารำคาญจริงๆเพราะฉันใช้ทั้งคู่
Kian

1
@Kian ฉันรายงานข้อผิดพลาด bugs.eclipse.org/bugs/show_bug.cgi?id=397027 เป็นที่น่ารำคาญมากและผมเริ่มที่จะใช้ห้องสมุดเพิ่มพวกเขาไม่ได้ผลิตข้อผิดพลาด :)
Halil Kaskavalci

1
ทำงานได้สำหรับฉัน! ขอบคุณ! (ทำโดยการอ้างอิงของคุณ) ฉันเพิ่ม -std = c ++ 11 ให้กับผู้ให้บริการและกู้คืนค่าเริ่มต้นในสัญลักษณ์ ฉันคิดว่าคืนค่าเริ่มต้นในสัญลักษณ์ช่วยฉัน ตอนนี้ unique_ptr กำลังแก้ไข
เดนิสซาอิจิน

20

สำหรับล่าสุด (Juno) eclipse cdt สิ่งต่อไปนี้ใช้ได้สำหรับฉันไม่จำเป็นต้องประกาศ__GXX_EXPERIMENTAL_CXX0X__ตัวเอง สิ่งนี้ใช้ได้กับตัวทำดัชนี CDT และเป็นพารามิเตอร์สำหรับคอมไพเลอร์:

"ชื่อโครงการของคุณ" -> คลิกขวา -> คุณสมบัติ:

ทั่วไป C / C ++ -> ตัวประมวลผลล่วงหน้ารวมเส้นทาง, มาโคร ฯลฯ -> สลับไปที่แท็บชื่อ "ผู้ให้บริการ":

  • สำหรับ "Configuration" เลือก "Release" (และหลังจากนั้น "debug")

  • ปิดผู้ให้บริการทั้งหมดและเพียงเลือก "การตั้งค่าคอมไพเลอร์ในตัวของ CDT GCC"

  • ยกเลิกการเลือก "แชร์รายการการตั้งค่าระหว่างโครงการ (ผู้ให้บริการทั่วโลก)"

  • ใน "คำสั่งเพื่อรับข้อมูลจำเพาะคอมไพเลอร์:" เพิ่ม "-std = c ++ 11" โดยไม่มีเครื่องหมายอัญประกาศ (อาจใช้กับเครื่องหมายคำพูดได้เช่นกัน)

  • กดใช้และปิดตัวเลือก

  • สร้างดัชนีใหม่

ตอนนี้ทุกสิ่งที่เกี่ยวข้องกับ c ++ 11 ควรได้รับการแก้ไขอย่างถูกต้องโดยตัวทำดัชนี

win7 x64, eclipse อย่างเป็นทางการล่าสุดพร้อม cdt mingw-w64 gcc 4.7.2จากโครงการ mingwbuilds บน sourceforge


ยังคงได้รับการเตือนแก้ไขที่ผิดพลาดเหมือนกันใน 'std :: thread' ประเภทไม่สามารถแก้ไขได้แม้ว่ามันจะรวบรวมและดำเนินการตกลง
Scott Stensland

2
คุณจำเป็นต้องรวบรวมหนึ่งครั้งด้วยการตั้งค่าใหม่ดังนั้น parser จะ "เรียนรู้" ที่มีการตั้งค่าสถานะ std = c ++ 11
Andreas

ขึ้นอยู่กับรุ่นของคอมไพเลอร์อาจจำเป็นต้องเพิ่ม -std = c ++ 0x แทน -std = c ++ 11 (เช่น debian
wheezy

15

ฉันมีปัญหาเดียวกันกับ Eclipse Juno ของฉัน ขั้นตอนเหล่านี้สามารถแก้ไขปัญหา:

  • Project -> Properties -> C/C++ General -> Path and Symbols -> Tab [Symbols]ไปที่
  • เพิ่มสัญลักษณ์: __cplusplusด้วยค่า201103L

2
คำตอบนี้ควรได้รับการยอมรับเนื่องจากใช้ได้กับโครงการ Makefile ด้วย!
omikron

@ Jerk31 สิ่งนี้ไม่ทำงานสำหรับ Eclipse Juno ที่ทำงานบน windows (สำหรับฉัน) ฉันยังคงเห็นข้อผิดพลาดที่ไม่จำเป็นที่บ่นถึงแม้ว่าข้อผิดพลาดไบนารีจะทำงานได้ดี โปรดช่วยฉันด้วย !!!
แลกเปลี่ยน

ฉันขอโทษจริง ๆ ที่ฉันไม่สามารถช่วยคุณบน Windows ฉันไม่มีโอกาสลองดำเนินโครงการ C ++ บนระบบปฏิบัติการนี้ ฉันขอให้คุณโชคดีและดีที่สุด!
เจอโรม

13

สำหรับ Eclipse CDT Kepler สิ่งที่ใช้ได้ผลสำหรับฉันที่จะกำจัดstd::threadสัญลักษณ์ที่ไม่ได้แก้ไขคือ:

  1. ไปที่การตั้งค่า -> C / C ++ -> Build-> การตั้งค่า

  2. เลือกแท็บ Discovery

  3. เลือกการตั้งค่าคอมไพเลอร์ในตัวของ CDT GCC [แชร์]

  4. เพิ่ม -std = c ++ 11 ลงในฟิลด์ "คำสั่งเพื่อรับข้อมูลจำเพาะคอมไพเลอร์:" เช่น:

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

  1. ตกลงและสร้างดัชนีใหม่สำหรับโครงการ

การเพิ่ม-std=c++11ลงในโปรเจ็กต์Properties/C/C++ Build->Settings->Tool Settings->GCC C++ Compiler->Miscellaneous->Other Flags ไม่เพียงพอสำหรับเคปเลอร์ แต่มันก็เพียงพอสำหรับเวอร์ชั่นที่เก่ากว่าเช่น Helios


สำหรับ Eclipse เวอร์ชั่น: 2019-09 R. วิธีนี้ใช้ได้ผลสำหรับฉัน แต่ฉันใช้เวลาไปมากก่อนหน้านั้น ปัญหาเกิดขึ้นในการตั้งค่าตัวสร้าง: โครงการ -> คุณสมบัติ -> การสร้าง C / C ++: ในแท็บ 'การตั้งค่าตัวสร้าง' เลือก 'ตัวสร้างภายใน' สำหรับ 'ประเภทตัวสร้าง'
grekhss

5

ฉันยังไม่สามารถออกความเห็นเพื่อเขียนคำตอบของตัวเอง:

เกี่ยวข้องกับ__GXX_EXPERIMENTAL_CXX0X__และใช้ได้กับ Eclipse Juno และ CDT 8.x

บางส่วนของคำตอบนี้กล่าวถึงแล้วในคำตอบอื่น ๆ แต่ฉันต้องการให้สอดคล้องกัน

เพื่อให้สามารถสร้างได้โดยใช้ stdc ++ 11 เราต้องเพิ่มการตั้งค่าสถานะเฉพาะสำหรับคอมไพเลอร์ คุณสามารถทำได้ผ่านคุณสมบัติของโครงการ การปรับเปลี่ยนคุณสมบัติของโครงการRMBและหรือProject properties ALT + ENTERจากนั้นสร้าง C / C ++ -> การตั้งค่า -> การตั้งค่าเครื่องมือ -> คอมไพเลอร์ GCC C ++ -> เบ็ดเตล็ด -> ธงอื่น ๆ ใส่ -std = C ++ 11 ที่ท้ายบรรทัดสำหรับ GCC -c -fmessage-length=0 -std=c++11มันจะมีลักษณะบางอย่างเช่น: โดยการเพิ่มตัวแปลธง -stdc ++ 11 (GCC) จะประกาศ__GXX_EXPERIMENTAL_CXX0X__ด้วยตัวเอง

ณ จุดนี้คุณสามารถสร้างโครงการโดยใช้คุณความดีทั้งหมดของ C ++ 11

ปัญหาคือ Eclipse มีตัวแยกวิเคราะห์เพื่อตรวจสอบข้อผิดพลาด - นั่นเป็นสาเหตุที่คุณยังคงได้รับข้อผิดพลาดที่น่ารังเกียจทั้งหมดใน Eclipse editor ในขณะเดียวกันคุณก็สามารถสร้างและรันโครงการได้โดยไม่ต้องทำอะไรเลย มีวิธีในการแก้ปัญหานี้โดยการประกาศการ__GXX_EXPERIMENTAL_CXX0X__ตั้งค่าสถานะสำหรับโครงการอย่างชัดเจนเราสามารถทำได้ (เช่นเดียวกับ Carsten Greiner กล่าว): C / C ++ ทั่วไป -> เส้นทางและสัญลักษณ์ -> สัญลักษณ์ -> GNU C ++ คลิก "เพิ่ม ... " และที่ผ่านมา__GXX_EXPERIMENTAL_CXX0X__(ตรวจสอบให้แน่ใจว่าได้เพิ่มขีดล่างสองอัน) ใน "ชื่อ" และปล่อยว่างไว้ "ค่า" และตอนนี้เป็นส่วนเพิ่มเติมที่ฉันต้องการครอบคลุมในความคิดเห็นคำตอบแรกไปที่: C / C ++ ทั่วไป -> Preprocessor รวม Path Macros เป็นต้น -> ผู้ให้บริการและเลือกCDT Managed Build Setting Entriesจากนั้นคลิกนำไปใช้และกลับไปที่แท็บรายการภายใต้ GNU C ++ ตอนนี้ควรมีรายการการตั้งค่าโครงสร้างที่มีการจัดการของ CDT หรือไม่ตรวจสอบว่าภายในมีการกำหนด__GXX_EXPERIMENTAL_CXX0X__หรือไม่ -> ใช้แล้วและสร้างดัชนีใหม่


3

ฉันมีปัญหาหลายอย่างเช่นกัน (Ubuntu 13.04 64-bit, g ++ - 4.8, eclipse Juno 3.8.1, CDT 6.0.0) หลายสิ่งหลายอย่างถูกกล่าวถึงข้างต้นขออภัยที่จะทำซ้ำ แต่นอกจากนี้ฉันมีปัญหาในการใช้

std::thread

เป็นส่วนหนึ่งของ c ++ 11 (การเพิ่ม -pthread สำหรับ linker แก้ปัญหานั้น) อย่างไรก็ตามในที่สุดการตั้งค่าเหล่านี้ก็ใช้งานได้ดี:

โครงการ -> คุณสมบัติ -> สร้าง C / C ++ -> การตั้งค่า -> เบ็ดเตล็ด เพิ่ม

-std=c++11

ตั้งค่าสถานะสำหรับคอมไพเลอร์ GCC และ G ++ คลิกนำไปใช้

สำหรับตัวลิงก์หน้าต่างเดียวกันค่าสถานะเบ็ดเตล็ดตัวเชื่อมโยงเพิ่ม

-pthread

ธง. การตั้งค่าไลบรารีที่ใช้ร่วมกันชื่อวัตถุที่แชร์เพิ่ม

-Wl,--no-as-needed

ติดธงเกินไป คลิกนำไปใช้

C / C ++ ทั่วไป -> เส้นทางและสัญลักษณ์ -> เลือก TAB, GNU C ++, เพิ่ม

__GXX_EXPERIMENTAL_CXX0X__

(ไม่มีค่า)

ธง. คลิกนำไปใช้

ทั่วไป C / C ++ -> ตัวประมวลผลล่วงหน้ารวมเส้นทาง .. -> แท็บผู้ให้บริการ: ตรวจสอบ

CDT GCC ในตัวการตั้งค่าคอมไพเลอร์

และสำหรับ "คำสั่งเพื่อรับข้อมูลจำเพาะคอมไพเลอร์" ให้เพิ่ม

-std=c++11

ธง. ยกเลิกการเลือกแบ่งปัน คลิกนำไปใช้

จัดการการตั้งค่ารายการสร้าง CDT ตรวจสอบด้วย ยกเลิกการเลือกอีกสองคน คลิกนำไปใช้

กลับไปที่แท็บรายการ GNU C ++ CDT จัดการรายการสร้างการตั้งค่าตอนนี้คุณควรเห็นของคุณเพิ่ม

__GXX_EXPERIMENTAL_CXX0X__

การเข้า

แค่นั้นแหละ. เมื่อการเข้ารหัสให้พิมพ์

std::

ตอนนี้สามารถทำให้คลาสของเธรดสมบูรณ์โดยอัตโนมัติตัวอย่างเช่น build ควรทำงานได้ดีและไม่ควรมี

std::system_error'what(): Enable multithreading to use std::thread: Operation not permitted

ที่รันไทม์


มันเป็นProject -> Properties -> C/C++ Build -> Settings -> Miscellaneousขั้นตอนที่เหมาะกับฉัน ขอบคุณมัด: D
Jake88

2

ฉันไม่รู้ว่ามันเป็นฉันหรือเปล่าโซลูชันที่มีอันดับสูงสุดไม่ทำงานสำหรับฉันเวอร์ชัน eclipse ของฉันเป็นเพียงแพลตฟอร์ม eclipse ปกติที่ติดตั้งโดยใช้ sudo apt-get eclipse ติดตั้งใน Ubuntu แต่ฉันพบวิธีแก้ปัญหาที่ใช้วิธีร่วมกัน จากทั้งโซลูชันที่มีอันดับสูงสุดและที่สองสิ่งที่ฉันทำเพื่อให้ทำงานได้อธิบายไว้ด้านล่าง (โปรดทราบว่าขั้นตอนอื่น ๆ เช่นการสร้างโครงการ C ++ เป็นต้นนั้นจะถูกละเว้นเพื่อความเรียบง่าย)

เมื่อคุณสร้างโครงการ C ++

(1) C / C ++ ทั่วไป -> เส้นทางและสัญลักษณ์ -> สัญลักษณ์ -> GNU C ++ คลิก "เพิ่ม ... " และวางGXX_EXPERIMENTAL_CXX0X (ตรวจสอบให้แน่ใจว่าได้ผนวกและขีดล่างสองอัน) ไว้ใน "ชื่อ" และปล่อยว่างไว้ "ค่า"

(2) ภายใต้การสร้าง C / C ++ (ที่การตั้งค่าโครงการ) ค้นหาเส้นทางรวมตัวประมวลผลล่วงหน้าและไปที่แท็บผู้ให้บริการ ยกเลิกการเลือกทั้งหมดยกเว้นการตั้งค่าคอมไพเลอร์ในตัว CDT GCC จากนั้นยกเลิกการแชร์รายการการตั้งค่า…. เพิ่มตัวเลือก -std = c ++ 11 ลงในกล่องข้อความชื่อ Command เพื่อรับข้อมูลจำเพาะคอมไพเลอร์

หลังจากดำเนินการตามขั้นตอนที่ 2 และ 2 ข้างต้นเท่านั้นมันก็ใช้งานได้คราสสามารถแก้ไขเอกลักษณ์ _ptr ได้ฉันไม่ทราบว่าทำไมโซลูชันนี้จึงทำงานได้หวังว่ามันจะช่วยผู้คนได้


สิ่งนี้ใช้ได้สำหรับฉันด้วย (eclipse Neon) ตอนแรกฉันไม่ได้ยกเลิกการเลือกผู้ให้บริการรายอื่นซึ่งยังคงก่อให้เกิดปัญหา แต่การยกเลิกการเลือกผู้ให้บริการอื่นทั้งหมดกว่า "การตั้งค่าคอมไพเลอร์ในตัว CDCC GCC" และ "การตั้งค่าผู้ใช้ CDT" ขอบคุณ!
zpon

2

Eclipse C / C ++ ไม่รู้จักสัญลักษณ์std::unique_ptrแม้ว่าคุณได้รวมส่วนหัวหน่วยความจำ C ++ 11 ไว้ในไฟล์ของคุณ

สมมติว่าคุณใช้คอมไพเลอร์ GNU C ++ นี่คือสิ่งที่ฉันทำเพื่อแก้ไข:

โครงการ -> คุณสมบัติ -> ทั่วไป C / C ++ -> ตัวประมวลผลล่วงหน้าประกอบด้วยเส้นทาง -> GNU C ++ -> รายการการตั้งค่าผู้ใช้ CDT

  1. คลิกที่ปุ่ม "เพิ่ม ... "

  2. เลือก "มาโครตัวประมวลผลล่วงหน้า" จากเมนูแบบเลื่อนลง

    Name: __cplusplus     Value:  201103L
  3. กด Apply จากนั้นตกลงเพื่อกลับไปที่โครงการของคุณ

  4. จากนั้นสร้างดัชนี C ++ ใหม่ของคุณ: โครงการ -> ดัชนี C / C ++ -> สร้างใหม่


นี่เป็นวิธีเดียวที่ใช้ได้สำหรับฉันใน Eclipse 2018-12 คำตอบ "ยอมรับ" ฯลฯ ไม่สามารถใช้งานได้ในปี 2018-12
David Steinhauer

1

สำหรับฉันในEclipse Neonฉันได้ปฏิบัติตามคำตอบของTrismegistosที่นี่ด้านบน YET ฉันยังเพิ่มขั้นตอนเพิ่มเติม:

  • ไปที่โครงการ -> คุณสมบัติ -> C ++ ทั่วไป -> ตัวประมวลผลล่วงหน้ารวมถึงเส้นทาง, มาโคร ฯลฯ -> ผู้ให้บริการ -> การตั้งค่าคอมไพเลอร์ในตัวของ CDT Cross GCC ผนวกแฟล็ก "-std = c ++ 11"

กดใช้และตกลง

ไชโย

ผู้ชาย.


0
  • คลิกขวาที่โครงการและไปที่ "คุณสมบัติ"
  • สร้าง C / C ++ -> การตั้งค่า -> การตั้งค่าเครื่องมือ -> คอมไพเลอร์ GCC C ++ -> เบ็ดเตล็ด -> ธงอื่น ๆ ใส่ -lm ที่ท้ายกล่องข้อความธงอื่น ๆ แล้วคลิกตกลง

Eclipse รุ่นนี้คืออะไร
Braiam

0

ทั้งแฮ็คหรือเวอร์ชั่นที่สะอาดกว่าใช้กับอินดิโก้ไม่ได้ แฮ็กจะถูกละเว้นและตัวเลือกการกำหนดค่าที่จำเป็นจะหายไป ไม่มีเหตุผลที่ชัดเจนสร้างเริ่มทำงานหลังจากไม่ทำงานและไม่ได้ให้เหตุผลที่เป็นประโยชน์ อย่างน้อยจากบรรทัดคำสั่งฉันได้รับผลลัพธ์ที่ทำซ้ำได้


0

ในการรับการสนับสนุนสำหรับ C ++ 14 ใน Eclipse Luna คุณสามารถทำตามขั้นตอนเหล่านี้:

  • ในC++ General -> Preprocessor Include -> Providers -> CDT Cross GCC Built-in Compiler Settingsเพิ่ม "-std = c ++ 14"
  • ในC++ Build -> Settings -> Cross G++ Compiler -> Miscellaneousเพิ่ม "-std = c ++ 14"

ทำดัชนีโครงการของคุณอีกครั้งและรีสตาร์ท Eclipse ในที่สุด มันควรจะทำงานได้ตามที่คาดไว้


0

ฉันแก้ไขมันด้วยวิธีนี้บน Mac ฉันใช้ Homebrew เพื่อติดตั้ง gcc / g ++ เวอร์ชันล่าสุด พวกเขาลงจอดใน / usr / local / bin พร้อมกับ in / usr / local / include

ฉันเขียนซีดีลงใน / usr / local / bin และสร้าง symlink จาก g ++ @ 7 สิ่งที่เพิ่ง g ++ ทำให้ @ bit น่ารำคาญ

จากนั้นฉันไปที่ MyProject -> Properties -> C / C ++ Build -> Settings -> คอมไพเลอร์ GCC C ++ และเปลี่ยนคำสั่งจาก "g ++" เป็น "/ usr / local / bin / g ++" หากคุณตัดสินใจที่จะไม่สร้างลิงก์สัญลักษณ์คุณสามารถเฉพาะเจาะจงมากขึ้น

ทำสิ่งเดียวกันสำหรับลิงเกอร์

ใช้และใช้และปิด ปล่อยให้มันสร้างดัชนีขึ้นมาใหม่ ในขณะที่มันแสดงจำนวนข้อผิดพลาดที่น่ากลัว แต่ฉันคิดว่านั่นคือในขณะที่การสร้างดัชนี ขณะที่ฉันหาข้อผิดพลาดพวกเขาทั้งหมดก็หายไปโดยไม่ต้องทำอะไรเพิ่มเติม


ฉันคิดว่าไม่มีการตรวจสอบว่าคุณสามารถไปที่ Eclipse -> Properties -> C / C ++ -> Core Build Toolchains และแก้ไขที่มีเส้นทางที่แตกต่างกัน แต่ฉันไม่แน่ใจว่าจะทำอะไร


0

ฉันมีปัญหาที่คล้ายกันโดยใช้ Eclipse C ++ 2019-03 สำหรับโครงการ C และ C ++ แบบผสมที่ใช้ std :: optional และ std :: swap สิ่งที่ใช้ได้ผลสำหรับฉันคือสิ่งนี้ ในโปรเจ็กต์ Properties-> C / C ++ Build-> Settings-> Tool Settings-> Cross G ++ Compiler ให้ลบ -std = gnu ++ 17 จากเบ็ดเตล็ดและวางไว้ใน Dialect-> ธงสำเนียงภาษาอื่นแทน


0

เมื่อใช้ตัวรวบรวมข้ามฉันมักจะได้รับระบบการสร้างที่กำหนดเองขั้นสูงที่สร้างขึ้นอย่างพิถีพิถันโดยเพื่อนร่วมงาน ฉันใช้ "Makefile Project กับรหัสที่มีอยู่" ดังนั้นคำตอบส่วนใหญ่ไม่สามารถใช้ได้

ในช่วงเริ่มต้นของโครงการฉันต้องระบุว่าฉันใช้ตัวรวบรวมข้ามในตัวช่วยสร้างสำหรับ "Makefile Project ด้วยรหัสที่มีอยู่" สิ่งที่น่ารำคาญก็คือในช่วง 10 ปีที่ผ่านมาปุ่มข้ามคอมไพเลอร์ในตัวช่วยสร้างนั้นไม่ได้แจ้งให้ทราบว่าตัวรวบรวมข้ามนั้นอยู่ที่ไหน ดังนั้นในขั้นตอนที่แก้ไขปัญหา C ++ และปัญหาการคอมไพเลอร์ข้ามฉันต้องไปที่แท็บผู้ให้บริการตามคำตอบเช่น @ravwojdyla ด้านบน แต่ผู้ให้บริการที่ฉันเลือกคือผู้ให้บริการข้ามคอมไพเลอร์ จากนั้นในกล่องคำสั่งฉันใส่เส้นทางแบบเต็มไปยังคอมไพเลอร์และฉันเพิ่ม -std = gnu ++ 11 สำหรับมาตรฐาน C ++ ที่ฉันต้องการได้รับการสนับสนุน งานนี้ออกมาได้ดีเท่าที่ควร

คุณสามารถทำสิ่งนี้กับโครงการที่มีอยู่ สิ่งเดียวที่คุณอาจต้องทำคือเรียกใช้ตัวสร้างดัชนีอีกครั้ง

ฉันไม่เคยเพิ่มการตั้งค่าสถานะการทดลองหรือแทนที่คำจำกัดความของ __cplusplus สิ่งเดียวคือถ้าฉันมีรหัส C ที่ทันสมัยจำนวนมากฉันไม่มีที่จะใส่ตัวเลือกมาตรฐานเฉพาะ C

และสำหรับเมื่อสิ่งต่าง ๆ ไม่ดีจริง ๆ การรับตัวแยกวิเคราะห์โดยใช้คำสั่งนั้นในเมนูย่อยตัวทำดัชนีอาจมีข้อมูลมาก

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