क्यूटी क्रिएटर में C ++ 11 कैसे सक्षम करें?


167

शीर्षक बहुत आत्म-वर्णनात्मक है। मैंने क्यूटी क्रिएटर 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 Creator का यह संस्करण C ++ 11 का समर्थन करता है। तो मैं इसे कैसे सक्षम करूं?


3
Qt Creator एक कंपाइलर नहीं है। जब आप पढ़ते हैं कि "Qt Creator C ++ 11 का समर्थन करता है" तो इसका मतलब है कि कोड पूरा करने वाला इंजन (इस मामले में क्लैंग) C ++ 11 सिंटैक्स का समर्थन करता है।
cmannett85

@ cmannett85 Qt Creator अभी भी Clang को C ++ सिंटैक्स पार्सर के रूप में उपयोग नहीं करता है। प्रयास थे, लेकिन क्लैंग के एपीआई और इस समाधान के सामान्य प्रदर्शन ने इसमें देरी की। इस दिशा में वर्तमान कार्य यहां स्थित है
रुबेंव

जवाबों:


261

इस साइट के अनुसार जोड़ें

CONFIG += c++11

आपकी .pro फ़ाइल (उस वेब पेज के नीचे देखें)। इसके लिए Qt 5 की आवश्यकता है।


अन्य उत्तर, सुझाव दे रहे हैं

QMAKE_CXXFLAGS += -std=c++11(या QMAKE_CXXFLAGS += -std=c++0x)

Qt 4.8 और gcc / clang के साथ भी काम करें


4
बेनामी डाउनवोट किसी की मदद नहीं कर रहे हैं। उत्तर में गलत क्या है?
अली

समस्या यह थी, मैं आपके डुप्लिकेट / अधूरे उत्तर को हटाने में सक्षम नहीं था, मैं यह कर सकता था कि इसे कम करना था। अब जब आपने इसे अधिक प्रस्तुत करने के लिए इसे संपादित कर दिया है, तो मैं केवल नीचे की ओर खुश हूं।
nurettin

9
@nurettin प्रतिक्रिया के लिए धन्यवाद। यदि आप उत्तरों के इतिहास (मेरा और अन्य) का ध्यानपूर्वक संपादन करते हैं, तो आप देखेंगे कि मेरा मूल उत्तर कोई डुप्लिकेट नहीं था; यह वास्तव में दूसरा जवाब था जिसने बेशर्मी से मेरे जवाब का हिस्सा चुरा लिया था, जिससे मेरा जवाब नकल जैसा लग रहा था। फिर दो और डुप्लिकेट उत्तर इस वर्ष दिखाई दिए। इसे संपादित इतिहास में अपने लिए जांचें। इस जानकारी को देखते हुए, क्या आप अपने पतन पर पुनर्विचार करेंगे?
अली

3
@ ट्रॉयसेफ़ यहाँ स्थिति की मेरी समझ है। मैं मान रहा हूं कि आप जीसीसी का उपयोग कर रहे हैं। अगर gcc का कोई संस्करण समर्थन करता है -std=c++11, तो इसे (पदावनत) -std=c++0xध्वज का भी समर्थन करना चाहिए , और दोनों झंडों का समान प्रभाव होना चाहिए (जो कि स्पष्ट रूप से आपकी मशीन पर मामला नहीं है)। यदि एक संकलक समर्थन करता है -std=c++0x, तो इसका मतलब यह नहीं है कि यह समझता है -std=c++11। इसलिए, -std=c++0xC ++ 11 संगतता मोड के लिए डिफ़ॉल्ट के रूप में चुनना एक उचित विकल्प है। मेरी मशीन पर, कम से कम मैन पेज के अनुसार , -std=c++0xऔर -std=c++11समान हैं।
अली

1
@ ट्रॉयसेफ, अब यह सच है कि -std=c++11यदि कंपाइलर इसका समर्थन करता है तो इसका उपयोग करना बेहतर होगा , और क्यूटी ऐसा करने के लिए पर्याप्त स्मार्ट हो सकता है। खैर, अगर यह मुद्दा आपको इतना परेशान करता है, तो आप बग रिपोर्ट दर्ज कर सकते हैं ...
अली

32

इसे अपनी .pro फ़ाइल में जोड़ें

QMAKE_CXXFLAGS += -std=c++11

या

CONFIG += c++11

18

अली के उत्कृष्ट उत्तर में संबोधित दोनों मामलों को संभालने के विकल्प के रूप में, मैं आमतौर पर जोड़ता हूं

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

मेरी परियोजना फ़ाइलों के लिए। यह तब आसान हो सकता है जब आप वास्तव में इस बात की अधिक परवाह नहीं करते हैं कि आपकी टीम में कौन से क्यूटी संस्करण का उपयोग कर रहे हैं, लेकिन आप चाहते हैं कि वे किसी भी मामले में C ++ 11 को सक्षम करें।


यह होना चाहिए -std = c ++ 11
प्रेड्रैज

8

अपनी qmake फ़ाइल में जोड़ें

QMAKE_CXXFLAGS+= -std=c++11
QMAKE_LFLAGS +=  -std=c++11

4

यदि आप क्यूटी (<5) के पुराने संस्करण का उपयोग कर रहे हैं, तो यह प्रयास करें

QMAKE_CXXFLAGS += -std=c++0x

1

एकमात्र जगह जिसे मैंने सफलतापूर्वक बनाया है, वह है:

... \ क्यूटी \ {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
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.