2014-09-17 15 views
6

के पक्ष में सीओ ++ 98 मोड अक्षम करें, मैं जेटब्रेन क्लियन में सी ++ 11 सिंटैक्स का उपयोग करके कुछ कोड संकलित करने का प्रयास कर रहा हूं, इसलिए मैं सी ++ 98 मोड को अक्षम करना चाहता हूं। मैंने this StackOverflow question के निर्देशों का पालन किया, लेकिन मैं इसे काम करने में असमर्थ हूं।सीओ ++ 11

इस लक्ष्य को प्राप्त करने के लिए, मैं ALT + SHIFT + F10 पर गया और प्रोग्राम तर्क में तर्क पारित किया।

फिर से निर्माण पर, सी ++ 98 मोड अभी भी सक्षम होना प्रतीत होता है।

/cygdrive/c/Users/Zarthus/Documents/test/command.cpp: In constructor 'Command::Command(std::vector<std::basic_string<char> >)': 
/cygdrive/c/Users/Zarthus/Documents/test/command.cpp:25:32: error: range-based 'for' loops are not allowed in C++98 mode 
    for (std::string command : commands) 
           ^
कोड

Command::Command(std::vector<std::string> cmds) 
{ 
    for (std::string command : cmds) 
    { 
     addCommand(command); 
    } 
} 

जबकि मैं काफी हद तक निश्चित मुद्दा मेरे कोड (IdeoneC++11 बनाम IdeoneC++98 (4.8.1)) के भीतर नहीं है कर रहा हूँ में

छवि: CLion Interface

क्या मैं था कल्पना करें संकलन स्ट्रिंग (प्रति टिप्पणियां):

C:\cygwin64\bin\cmake.exe --build C:\Users\Zarthus\.clion10\system\cmake\generated\6dd8bed\6dd8bed\Debug --target testProject -- -j 4 

तो ऐसा नहीं लगता है कि इसमें मेरी सामग्री शामिल है।

मुझे अन्य जेटब्रेन आईडीई के साथ बहुत अधिक अनुभव नहीं है, लेकिन जो मैं कह सकता हूं उससे वे अधिकतर समान हैं।

क्या कोई इसे पुन: उत्पन्न करने में सक्षम है? क्या मुझे जेटब्रेन को फीडबैक भेजना चाहिए कि यह 100% काम नहीं कर रहा है (यह अभी भी एक प्रारंभिक रिलीज बिल्ड है)? या मैं बस इसे बॉट कर रहा हूं और क्या यहां कोई उपयोगकर्ता त्रुटि है?

धन्यवाद!

+0

कभी भी CLion का उपयोग नहीं किया गया, लेकिन क्या यह देखने का कोई तरीका है कि g ++ कंपाइलर वास्तव में क्या कर रहा है, यानी "वर्बोज़" मोड? इस तरह आप देख सकते हैं कि आपके तर्क उठाए जा रहे हैं लेकिन अनदेखा किए गए हैं, कभी नहीं उठाए गए हैं, आदि – PaulMcKenzie

+0

@PaulMcKenzie मैंने एक सी: \ cygwin64 \ bin \ cmake.exe स्ट्रिंग जोड़ा - मुझे यकीन नहीं है कि यह ठीक है मैं देख रहा हूं, लेकिन यह सबसे अच्छा है जो मुझे मिल सकता है। अतिरिक्त डीबग जानकारी के लिए - मुझे ऐसा विकल्प नहीं मिला। – Zarthus

+0

एक आईडीई में आमतौर पर एक विंडो या कुछ साधन होते हैं ताकि आप संपूर्ण कमांड लाइन स्ट्रिंग देख सकें जो संकलक उपयोग कर रहा है। अन्यथा आप अंधेरे से संकलित कर रहे हैं। 'Cmake' एक फ़ाइल का उपयोग करता है, और उस फ़ाइल के अंदर कंपाइलर द्वारा उपयोग की जाने वाली कमांड-स्ट्रिंग है। मूल रूप से आपको यह पता लगाने की आवश्यकता होती है कि कंपाइलर द्वारा उपयोग की जाने वाली सटीक कमांड स्ट्रिंग है, और फिर वहां से काम करें। – PaulMcKenzie

उत्तर

8

यह AL12 + SHIFT + F10 के कमांड लाइन तर्कों के बजाय CMakeLists.txt के अंत तक add_definitions(-std=c++11) जोड़कर हल किया गया है।

+1

न तो 'सेट (CXX_STANDARD 11)' और न ही 'सेट (CMAKE_CXX_FLAGS "$ {CMAKE_CXX_FLAGS} -std = C++ 11")' मेरे लिए काम करेगा, लेकिन ऐसा हुआ। धन्यवाद! – WhiteHotLoveTiger