วิธีการเปิดใช้งาน C ++ 11 ใน Qt Creator?


167

ชื่อค่อนข้างสื่อความหมายได้เอง ฉันดาวน์โหลด Qt Creator 2.7.0 แล้วและฉันพยายามรวบรวมรหัส C ++ 11 พื้นฐาน:

int my_array[5] = {1, 2, 3, 4, 5};
for(int &x : my_array)
{
  x *= 2;
}

ฉันได้รับข้อผิดพลาดต่อไปนี้:

range based for loops are not allowed in c++ 98 mode

แต่ตามบทความนี้ผู้สร้าง Qt รุ่นนี้รองรับ C ++ 11 ดังนั้นฉันจะเปิดใช้งานได้อย่างไร


3
ผู้สร้าง Qt ไม่ใช่ผู้แปล เมื่อคุณอ่านว่า "ผู้สร้าง Qt รองรับ C ++ 11" หมายความว่าเอ็นจินการเติมโค้ด (เสียงดังในกรณีนี้) รองรับไวยากรณ์ C ++ 11
cmannett85

@ cmannett85 Qt Creator ยังคงไม่ใช้ Clang เป็นตัวแยกวิเคราะห์ไวยากรณ์ C ++ มีความพยายาม แต่ API ของ Clang และประสิทธิภาพโดยรวมของโซลูชันนี้ล่าช้าออกไป การทำงานในปัจจุบันในทิศทางนี้ตั้งอยู่ที่นี่
rubenvb

คำตอบ:


261

ตามเว็บไซต์นี้เพิ่ม

CONFIG += c++11

ไปที่ไฟล์. pro ของคุณ (ดูที่ด้านล่างของหน้าเว็บนั้น) มันต้องใช้ Qt 5


คำตอบอื่น ๆ ที่แนะนำ

QMAKE_CXXFLAGS += -std=c++11(หรือQMAKE_CXXFLAGS += -std=c++0x)

ใช้ได้กับQt 4.8 และ gcc / clang


4
downvotes แบบไม่ระบุชื่อไม่ได้ช่วยใคร เกิดอะไรขึ้นกับคำตอบ?
อาลี

ปัญหาคือฉันไม่สามารถลบคำตอบที่ซ้ำกัน / ไม่สมบูรณ์ของคุณทั้งหมดที่ฉันทำได้คือลงคะแนน ตอนนี้คุณได้แก้ไขมันเพื่อให้เรียบร้อยมากขึ้นฉันมีความสุขกับการโหวตเท่านั้น
nurettin

9
@nurettin ขอบคุณสำหรับความคิดเห็น หากคุณตรวจสอบอย่างละเอียดเกี่ยวกับประวัติการแก้ไขของคำตอบ (ของฉันและของอื่น ๆ ) คุณจะเห็นว่าคำตอบดั้งเดิมของฉันไม่ได้ซ้ำกัน เป็นคำตอบอื่นที่ขโมยส่วนหนึ่งของคำตอบของฉันอย่างไร้ยางอายทำให้คำตอบของฉันดูเหมือนซ้ำซ้อน จากนั้นคำตอบที่ซ้ำกันสองคำก็ปรากฏขึ้นในปีนี้ ตรวจสอบด้วยตัวคุณเองในประวัติการแก้ไข เมื่อได้รับข้อมูลนี้คุณจะต้องพิจารณา downvote ของคุณอีกครั้งหรือไม่
อาลี

3
@Troyseph นี่คือความเข้าใจของฉันเกี่ยวกับสถานการณ์ ฉันสมมติว่าคุณกำลังใช้ gcc หาก gcc รุ่นใดรองรับ-std=c++11ก็ควรสนับสนุนการ-std=c++0xตั้งค่าสถานะ(คัดค้าน) เช่นกันและธงทั้งสองควรจะมีผลเหมือนกัน (ซึ่งเห็นได้ชัดว่าไม่ใช่กรณีในเครื่องของคุณ) ถ้าคอมไพเลอร์สนับสนุน ก็ไม่ได้หมายความว่ามันเข้าใจ-std=c++0x -std=c++11ดังนั้นการเลือก-std=c++0xเป็นค่าเริ่มต้นสำหรับโหมดความเข้ากันได้ของ C ++ 11 เป็นตัวเลือกที่สมเหตุสมผล ในเครื่องของฉัน, อย่างน้อยตามหน้าคน , -std=c++0xและ -std=c++11เหมือนกัน
อาลี

1
@Troyseph ตอนนี้มันเป็นความจริงที่มันจะดีกว่า-std=c++11ถ้าใช้คอมไพเลอร์รองรับมันและ Qt อาจฉลาดพอที่จะทำเช่นนั้น ดีถ้าปัญหานี้คุณเจ็บมากที่คุณสามารถยื่นรายงานข้อผิดพลาด ...
อาลี


18

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

# With C++11 support
greaterThan(QT_MAJOR_VERSION, 4){    
CONFIG += c++11
} else {
QMAKE_CXXFLAGS += -std=c++0x
}

ไปยังไฟล์โครงการของฉัน สิ่งนี้มีประโยชน์เมื่อคุณไม่สนใจว่ารุ่น Qt ใดที่คนใช้ในทีมของคุณ แต่คุณต้องการให้พวกเขาเปิดใช้งาน C ++ 11 ไม่ว่าในกรณีใด


นี่ควรเป็น -std = c ++ 11
Predrag Manojlovic


4

หากคุณกำลังใช้ QT รุ่นก่อนหน้า (<5) ลองทำสิ่งนี้

QMAKE_CXXFLAGS += -std=c++0x

1

ที่เดียวที่ฉันทำให้มันสำเร็จคือการค้นหาโดย:

... \ Qt \ {5.9; หรือรุ่นของคุณ} \ mingw {53_32; หรือรุ่นของคุณ} \ mkspecs \ win32-g ++ \ qmake.conf:

จากนั้นที่บรรทัด:

QMAKE_CFLAGS           += -fno-keep-inline-dllexport

แก้ไข:

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