ग्रहण सीडीटी में C ++ 11 / C ++ 0x समर्थन को कैसे सक्षम करें?


210

ग्रहण 3.7.1 सीडीटी 1.4.1 जीसीसी 4.6.2

यह C ++ 11 कोड के एक टुकड़े का एक उदाहरण है:

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

ग्रहण संपादक के बारे में शिकायत करता है:

Function 'unique_ptr' could not be resolved

Makefile संकलन ठीक काम करता है। इस प्रकार की त्रुटियों के बारे में शिकायत करने से ग्रहण को कैसे रोकें?


12
बहुत कम से कम, यह होना चाहिएstd::unique_ptr<char[]>
Cubbi

यह सुनिश्चित नहीं है कि सही है - char [] char * और unique_ptr <char> char परिवर्तनीय है char to char, जैसे char *
Nick

1
unique_ptr<char>कॉल नहीं करेगा delete, जो गलत है क्योंकि यह बनाया गया था new[]?
डिट्रीच एप्प

6
@ निक: नहीं, वह सही है। जिस तरह से आपने इसे लिखा है वह deleteकॉल करने का कारण होगा , जब आपको कॉल करने की आवश्यकता होगी delete[] । यह unique_ptr<char>मानता है कि यह एक पॉइंटर हो रहा है, जिसके साथ डिलीट हो जाता है deleteunique_ptr<char[]>एक सरणी की अपेक्षा करता है, जो delete[]सही तरीके से हटा दी जाती है ।
निकोल बोल

जवाबों:


224

मुझे यह लेख एक्लिप्स फोरम में मिला , बस उन चरणों का पालन किया और यह मेरे लिए काम करता है। मैं एक सिग्विन सेटअप के साथ विंडोज पर ग्रहण इंडिगो 20110615-0604 का उपयोग कर रहा हूं।

  • एक नया C ++ प्रोजेक्ट बनाएं
  • सब कुछ के लिए डिफ़ॉल्ट विकल्प
  • एक बार बनाने के बाद, प्रोजेक्ट को राइट-क्लिक करें और "गुण" पर जाएं
  • C / C ++ बिल्ड -> सेटिंग्स -> टूल सेटिंग्स -> GCC C ++ कंपाइलर -> विविध -> अन्य झंडे। रखो -std=c++0x(या -std=c++11अंत में नए संकलक संस्करण के लिए ... जीसीसी सी ++ कंपाइलर के बजाय मेरे पास सिग्विन कंपाइलर भी है
  • C / C ++ General -> Paths और Symbols -> Symbols -> GNU C ++। "जोड़ें ..." पर क्लिक करें और __GXX_EXPERIMENTAL_CXX0X__"नाम" में पेस्ट करें (दो अंडरस्कोर संलग्न करें और प्रीपेन्ड करें) और "मान" रिक्त छोड़ दें।
  • हिट लागू करें, जो भी आपसे करने के लिए कहें, उसे करें, फिर ठीक पर क्लिक करें।

ग्रहण संबंधी अक्सर पूछे जाने वाले प्रश्नों में इसका वर्णन है: ग्रहण सामान्य प्रश्न / सी ++ 11 विशेषताएं

ग्रहण छवि सेटिंग


2
हाँ, यह काम किया! लेकिन, GXX_EXPERIMENTAL_CXX0X पर दो अंडरस्कोर प्रीपेन्ड और अपेंडेंट करना सुनिश्चित करें - मैं इस बीच इसे स्वीकार कर लूंगा
Nick

5
क्या इसने संपादकीय त्रुटियों को दूर किया? मुझे संकलन करने में कोई समस्या नहीं है, और नए एसटीडी प्रकारों को मान्यता दी गई है, लेकिन मैं छोरों और प्रतिद्वंद्वियों के संदर्भ के लिए रेंज के लिए संपादक सिंटैक्स त्रुटियों से छुटकारा नहीं पा सकता हूं &&
जुआनकोपंजा

7
स्वाभाविक अनुवर्ती प्रश्न अब बन जाता है: क्या हम इन विशिष्ट C ++ प्रोजेक्ट सेटिंग्स को एक नए ग्रहण प्रोजेक्ट टेम्पलेट में "C ++ 11 प्रोजेक्ट" कहकर अपने वर्कफ़्लो को अनुकूलित कर सकते हैं?
नॉर्डलोव

38
नोट: किसी के लिए भी जूनो के जवाब की तलाश में, यह काम नहीं करता है
क्रिस्टोफर

4
केप्लर / जूनो के लिए, इस उत्तर में समाधान पाया जाता है । यह नीचे जोहान लुंडबर्ग के उत्तर के संपादन में पोस्ट किया गया है, लेकिन मैं इसे यहां भी ध्यान देता हूं, ताकि स्वीकृत उत्तर को और अधिक पूरा किया जा सके।
अविभाज्य लूमिएस

150

ग्रहण सीडीटी 4.4 लूना और 4.5 मंगल के लिए निर्देश

प्रोजेक्ट बनाने से पहले, पहले सिंटैक्स पार्सर कॉन्फ़िगर करें:

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

Command to get compiler specsएपेंड के हकदार टेक्स्ट बॉक्स में-std=c++11

अब आप प्रोजेक्ट बना सकते हैं, कॉन्फ़िगरेशन इस बात पर निर्भर करता है कि आपने किस तरह का प्रोजेक्ट बनाया है:

प्रोजेक्ट के रूप में बनाया गया: फ़ाइल -> नया -> प्रोजेक्ट -> सी / सी ++ -> सी ++ प्रोजेक्ट

निर्मित परियोजना पर राइट क्लिक करें और खोलें

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

-std=c++11हकदार टेक्स्ट बॉक्स में डालें other dialect flagsया ड्रॉप डाउन ISO C++11से चयन करें Language standard

CMake प्रोजेक्ट के लिए

ग्रहण परियोजना फ़ाइलें (अपनी परियोजना के अंदर) उत्पन्न करें

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

फिर मानक ग्रहण परियोजना के रूप में ग्रहण करने के लिए उत्पन्न निर्देशिका आयात करें। राइट क्लिक प्रोजेक्ट और ओपन

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

सक्षम करें CDT GCC Build-in Compiler Settingsऔर इसे उच्चतर करें Contributed PathEntry Containers(यह महत्वपूर्ण है)

अंतिम आम कदम

recompile, regenerate Project-> C/C++ Indexऔर ग्रहण को पुनः आरंभ करें।


1
एक ग्रहण पुनः आरंभ की आवश्यकता के बिना भी पूरी तरह से काम किया। धन्यवाद।
प्रशान्त

धन्यवाद। लूना पर भी मेरे लिए कोई अन्य जवाब काम नहीं आया।
मोहम्मद अल-नकीब

फिर भी मंगल पर काम करता है। महान जवाब से अधिक! अगर मैं केवल दो बार इस जवाब को वोट कर सकता था!
मोहम्मद अल-नकीब

धन्यवाद! यह उस मुद्दे के लिए सबसे उपयोगी उत्तर है जो मैंने (4.5)
AturSams

2
ग्रहण के लिए नियॉन .3, सी ++ मेकफाइल प्रोजेक्ट के साथ, इसमें जोड़ने के -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परियोजना बनाई थी, तो इसे ऊपर वर्णित स्थान में कॉपी नहीं किया गया था ।
मधुमक्खी पालन

112

अपडेट २०१६:

के रूप में जीसीसी 6 ( परिवर्तन ), डिफ़ॉल्ट सी ++ बोली सी ++ 14 है। इसका मतलब यह है कि जब तक आपको स्पष्ट रूप से एक नई या पुरानी बोली की आवश्यकता नहीं है, तब तक आपको ग्रहण के साथ कुछ भी करने की आवश्यकता नहीं है।

लूना और मंगल के लिए

यह समुदाय विकी सेक्शन Trismegistos द्वारा उत्तर को शामिल करता है;

1. प्रोजेक्ट बनाने से पहले, ग्रहण सिंटैक्स पार्सर कॉन्फ़िगर करें:

विंडो -> वरीयताएँ -> C / C ++ -> बिल्ड -> सेटिंग्स -> डिस्कवरी -> CDT GCC बिल्ड-इन कंपाइलर सेटिंग्स

कंपाइल स्पेक्स अपेंड पाने के लिए कमांड के हकदार टेक्स्ट बॉक्स में -std=c++14 2. प्रोजेक्ट बनाएं, कॉन्फ़िगरेशन इस बात पर निर्भर करता है कि आपने किस तरह का प्रोजेक्ट बनाया है:

प्रोजेक्ट के रूप में बनाया गया: फ़ाइल -> नया -> प्रोजेक्ट -> सी / सी ++ -> सी ++ प्रोजेक्ट

निर्मित परियोजना पर राइट क्लिक करें और खोलें

गुण -> C / C ++ बिल्ड -> सेटिंग्स -> टूल सेटिंग्स -> GCC C ++ कंपाइलर -> बोली

-std=c++14अन्य बोली झंडे के हकदार टेक्स्ट बॉक्स में डालें या भाषा मानक ड्रॉप डाउन से ISO C ++ 11 का चयन करें।

GXX_EXPERIMENTAL हैक के बिना इसे हल करने का अब एक नया तरीका है।

सबसे हाल के संस्करणों के लिए : (वर्तमान में जूनो और केप्लर लूना ):

जूनो के नए संस्करणों के तहत सेटिंग्स में स्थित हैं 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 जोड़ें

  2. रास्तों और प्रतीकों पर जाएं। प्रतीकों के तहत, डिफ़ॉल्ट को पुनर्स्थापित करें पर क्लिक करें और फिर आवेदन करें।


टिप्पणियाँ:

ग्रहण लागू होने के बारे में अचार है, आपको इसे हर बार सेटिंग टैब को छोड़ना होगा।

[स्व-प्रचार]: मैंने उपरोक्त के आधार पर अपने स्वयं के अधिक विस्तृत निर्देश लिखे। http://scrupulousabstractions.tumblr.com/post/36441490955/eclipse-mingw-builds

Https://stackoverflow.com/a/13635080/1149664Nobody पर उपयोगकर्ता को धन्यवाद


3
धन्यवाद, लेकिन इसने मुझे c ++ 11 संदर्भों को हल करने में मदद नहीं की। कार्यक्रम सही ढंग से संकलित करता है, लेकिन ग्रहण उन्हें हल नहीं कर सकता है। जब मैं "एरे" की जाँच करता हूँ, तो #ifndef __GXX_EXPERIMENTAL_CXX0X__सही होता है और नीचे का कोड पार्स नहीं होता है। जब मैं __GXX_EXPERIMENTAL_CXX0X__प्रोजेक्ट प्रतीकों में जोड़ता हूं , तो सरणी हल हो जाती है, लेकिन मेरी परियोजना के संदर्भ गड़बड़ हो जाते हैं। यहां क्या समस्या हो सकती है?
हालिल कासावक्ली

1
मुझे लगता है कि यह एक बग है। मैंने इसे इस तरह से फिर से तैयार किया: नई परियोजना खोलें। C ++ 11 सुविधाओं को सक्षम करें। एक सार्वजनिक चर के साथ एक यादृच्छिक वर्ग जोड़ें। इस यादृच्छिक वर्ग के वेक्टर बनाएं। पुनरावृति प्राप्त करें। सार्वजनिक चर तक पहुँचने का प्रयास करें। या तो मेरा कार्यक्षेत्र दूषित है या ग्रहण में कोई बग है जो इसे पार्स नहीं कर सकता है।
हालिल कासावक्लिसी

1
@HalilKaskavalci मुझे यही बग मिला। यदि मैं c ++ 11 के लिए संपादक सेट करता हूं, तो पुनरावृत्तियाँ हल नहीं कर सकती हैं। अगर मैं नहीं करता, तो std :: unique_ptr हल नहीं हो सकता। वास्तव में कष्टप्रद, क्योंकि मैं दोनों का उपयोग करता हूं।
कियान

1
@ कियान I ने बग की सूचना दी। bugs.eclipse.org/bugs/show_bug.cgi?id=397027 । यह काफी कष्टप्रद है और मैंने बूस्ट लाइब्रेरियों का उपयोग करना शुरू कर दिया है, वे त्रुटि पैदा नहीं करते हैं :)
Halil Kaskavalci

1
मेरे लिये कार्य करता है! धन्यवाद! (यह आपके संदर्भ द्वारा किया गया था) Iva गयी गयी -std = c ++ 11 प्रदाताओं को और प्रतीकों में चूक को पुनर्स्थापित करें। मुझे लगता है कि प्रतीकों में डिफ़ॉल्ट को पुनर्स्थापित करना मुझे बचाता है। अब unique_ptr हल हो रहा है।
डेनिस ज़ैकिन

20

नवीनतम (जूनो) ग्रहण के लिए निम्नलिखित कार्य मेरे लिए काम करते हैं, __GXX_EXPERIMENTAL_CXX0X__स्वयं को घोषित करने की आवश्यकता नहीं है । यह सीडीटी इंडेक्सर और कंपाइलर के लिए पैरामीटर के रूप में काम करता है:

"आपका प्रोजेक्ट नाम" -> राइट क्लिक -> गुण:

C / C ++ जनरल -> प्रीप्रोसेसर में पथ, मैक्रो आदि शामिल हैं -> "प्रोवाइडर्स" नाम के टैब पर जाएं:

  • "कॉन्फ़िगरेशन" के लिए "रिलीज़" चुनें (और बाद में "डीबग")

  • सभी प्रदाताओं को बंद करें और बस "सीडीटी जीसीसी बिल्ट-इन कंपाइलर सेटिंग्स" चुनें

  • "प्रोजेक्ट्स (वैश्विक प्रदाता) के बीच शेयर सेटिंग प्रविष्टियां अनचेक करें"

  • "कमांड में कंपाइलर स्पेक्स प्राप्त करने के लिए:" ऐड -std = c ++ 11 "बिना कोट्स के (उद्धरण के साथ भी काम कर सकते हैं)

  • हिट लागू करें और विकल्प बंद करें

  • सूचकांक का पुनर्निर्माण करें

अब सभी c ++ 11 संबंधित सामान को इंडेक्सर द्वारा सही तरीके से हल किया जाना चाहिए।

win7 x64, cdt mingw- w64 gcc 4.7.2 के साथ नवीनतम आधिकारिक ग्रहण


अभी भी एक ही त्रुटिपूर्ण संपादक की चेतावनी मिल रही है, जैसा कि टाइप 'std :: thread' में हल नहीं किया जा सकता है, भले ही यह ठीक है और इसे निष्पादित करता है
Scott Stensland

2
यू को नई सेटिंग्स के साथ एक बार संकलन करने की आवश्यकता है, इसलिए पार्सर "सीखेंगे" कि std = c ++ 11 ध्वज सेट है
Andreas

संकलक संस्करण के आधार पर -std = c ++ 11 के बजाय -dd = c ++ 0x को जोड़ना आवश्यक हो सकता है (जैसे डेबियन
व्हीज़ी

15

मुझे अपने ग्रहण जूनो पर भी यही समस्या थी। इन कदमों से समस्या हल हुई:

  • के पास जाओ Project -> Properties -> C/C++ General -> Path and Symbols -> Tab [Symbols]
  • प्रतीक जोड़ें: __cplusplus मान 201103L के साथ

2
यह जवाब देना चाहिए क्योंकि यह मेकफाइल परियोजनाओं के लिए भी काम करता है!
ओमिक्क्रोन

@ जर्क 31 यह विंडोज़ (मेरे लिए) पर चलने वाले एक्लू जूनो के लिए काम नहीं कर रहा है, मुझे अभी भी उन शिकायत की गई जो गैर-जरूरी त्रुटियों की शिकायत है, बाइनरी ठीक काम करने के बावजूद। कृपया मेरी मदद करें!!!
ओवरएक्सचेंज

मुझे वास्तव में खेद है कि मैं विंडोज पर आपकी मदद नहीं कर सकता, मेरे पास इस OS पर किसी भी C ++ प्रोजेक्ट को निष्पादित करने का प्रयास करने का अवसर नहीं है। मैं आपको शुभकामनाएं और शुभकामनाएं देता हूं!
जेरोम

13

ग्रहण सीडीटी केपलर के लिए जो मेरे लिए काम आया था वह std::threadअनसुलझे प्रतीक से छुटकारा पाने के लिए है:

  1. प्राथमिकताएं-> C / C ++ -> Build-> सेटिंग्स पर जाएं

  2. डिस्कवरी टैब चुनें

  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 फ्लैग को जोड़ना केप्लर के लिए पर्याप्त नहीं था, हालांकि यह पुराने संस्करणों जैसे कि हेलिओस के लिए पर्याप्त था।


ग्रहण संस्करण के लिए: 2019-09 R. इस समाधान ने मेरे लिए काम किया, हालांकि, मैंने इससे पहले बहुत समय बिताया है। समस्या बिल्डर सेटिंग्स में थी: प्रोजेक्ट -> गुण -> C / C ++ बिल्ड: टैब में 'बिल्डर सेटिंग्स' 'बिल्डर प्रकार' के लिए 'आंतरिक बिल्डर' चुनें।
grekhss

5

मैं अभी तक टिप्पणी नहीं कर सकता इसलिए अपना जवाब लिख रहा हूं:

यह संबंधित है __GXX_EXPERIMENTAL_CXX0X__और यह ग्रहण जूनो और सीडीटी 8.x के लिए मान्य है।

इस उत्तर के कुछ हिस्से पहले से ही अन्य उत्तरों में शामिल हैं, लेकिन मैं चाहता हूं कि यह सुसंगत हो।

Stdc ++ 11 का उपयोग करके निर्माण करना संभव बनाने के लिए, संकलक के लिए विशिष्ट ध्वज जोड़ना होगा। आप परियोजना के गुणों के माध्यम से ऐसा कर सकते हैं। परियोजना के गुण को संशोधित करने के RMBऔर Project propertiesया ALT + ENTER। फिर सी / सी ++ बिल्ड -> सेटिंग्स -> टूल सेटिंग्स -> जीसीसी सी ++ कंपाइलर -> विविध -> अन्य झंडे। पंक्ति के अंत में रखो -std = c ++ 11, जीसीसी के लिए यह कुछ ऐसी दिखाई देगी: -c -fmessage-length=0 -std=c++11। -Stdc जोड़कर ++ 11 फ्लैग कंपाइलर (GCC) अपने आप घोषित करेगा __GXX_EXPERIMENTAL_CXX0X__

इस बिंदु पर आप C ++ 11 की सभी अच्छाई का उपयोग करके परियोजना का निर्माण कर सकते हैं।

समस्या यह है कि त्रुटियों के लिए जांच करने के लिए एक्लिप्स का अपना पार्सर है - यही कारण है कि आप अभी भी ग्रहण संपादक में सभी खराब त्रुटियों को प्राप्त कर रहे हैं, जबकि एक ही समय में आप बिना किसी परियोजना के निर्माण और चला सकते हैं। __GXX_EXPERIMENTAL_CXX0X__प्रोजेक्ट के लिए स्पष्ट रूप से ध्वज की घोषणा करके इस समस्या को हल करने का एक तरीका है , कोई भी ऐसा कर सकता है (जैसे कार्स्टन ग्रीनर ने कहा): सी / सी ++ जनरल -> पथ और प्रतीक -> प्रतीक -> जीएनयू सी ++। "जोड़ें ..." पर क्लिक करें और अतीत __GXX_EXPERIMENTAL_CXX0X__("नाम में दो अंडरस्कोर संलग्न करें और प्रीपेन्ड करें") और "मान" रिक्त छोड़ दें। और अब वह अतिरिक्त हिस्सा है जिसे मैं पहले उत्तर के लिए टिप्पणी में शामिल करना चाहता था, पर जाएं: C / C ++ जनरल -> प्रीप्रोसेसर पथ मैक्रो आदि शामिल करें -> प्रदाता, और चयन करेंCDT Managed Build Setting Entriesउसके बाद APPLY पर क्लिक करें और वापस एंट्री टैब पर जाएं, GNU C ++ के तहत अब CDT मैनेज बिल्ड सेटिंग एंट्री चेक होना चाहिए अगर अंदर यह परिभाषित किया गया है कि __GXX_EXPERIMENTAL_CXX0X__क्या यह है -> APPLY और पुनर्निर्माण इंडेक्स आपको इस बिंदु पर ठीक होना चाहिए।


3

मेरे पास कई मुद्दे भी थे (Ubuntu 13.04 64-बिट, g ++ - 4.8, ग्रहण जूनो 3.8.1, सीडीटी 6.0.0)। ऊपर बहुत सारी चीजों का उल्लेख किया गया है, जिन्हें दोहराने के लिए खेद है, लेकिन इसके अतिरिक्त मुझे उपयोग करने में समस्या थी

std::thread

सी ++ 11 के हिस्से के रूप में (लिंकर के लिए -pthread उस मुद्दे को हल करता है)। वैसे भी, आखिरकार इन सेटिंग्स ने ठीक काम किया:

प्रोजेक्ट -> गुण -> C / C ++ बिल्ड -> सेटिंग्स -> विविध। जोड़ें

-std=c++11

GCC और G ++ संकलक के लिए ध्वज। अप्लाई पर क्लिक करें।

लिंकर के लिए, एक ही खिड़की, विविध, लिंकर झंडे, जोड़ा

-pthread

झंडा। साझा की गई लाइब्रेरी सेटिंग्स, साझा की गई वस्तु का नाम, जोड़ें

-Wl,--no-as-needed

झंडा भी। अप्लाई पर क्लिक करें।

C / C ++ जनरल -> पथ और प्रतीक -> प्रतीक TAB, GNU C ++ चयनित, जोड़ें

__GXX_EXPERIMENTAL_CXX0X__

(कोई मूल्य नहीं)

झंडा। अप्लाई पर क्लिक करें।

C / C ++ General -> Preprocessor रास्ते शामिल करें .. -> प्रदाता टैब: जाँच करें

सीडीटी जीसीसी बिल्ट-इन कंपाइलर सेटिंग्स

और "कम्पाइलर स्पेक्स प्राप्त करने के लिए कमांड" के लिए, जोड़ें

-std=c++11

झंडा। शेयर को अनचेक करें। अप्लाई पर क्लिक करें।

CDT मैनेज सेटिंग सेटिंग का निर्माण करें, इसे भी जांचें। दो अन्य को अनचेक करें। अप्लाई पर क्लिक करें।

एंट्री टैब पर वापस जाकर, GNU C ++ CDT मैनेजिंग सेटिंग बनाएँ एंट्रीज़, अब आपको अपना जोड़ा देखना चाहिए

__GXX_EXPERIMENTAL_CXX0X__

प्रवेश।

बस। जब कोडिंग, टाइपिंग

std::

उदाहरण के लिए अब थ्रेड क्लास को ऑटो-कंप्लीट कर सकते हैं, बिल्ड को ठीक काम करना चाहिए और कोई भी नहीं होना चाहिए

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

चलने के समय पर।


यह Project -> Properties -> C/C++ Build -> Settings -> Miscellaneousमेरे लिए काम करने वाला कदम था । धन्यवाद एक गुच्छा: D
Jake88

2

मुझे नहीं पता कि यह केवल मेरे लिए है, सर्वोच्च रैंक वाला समाधान मेरे लिए काम नहीं करता है, मेरा ग्रहण संस्करण सिर्फ सामान्य ग्रहण प्लेटफ़ॉर्म है जिसे उड्डू में सुडो एप्ट-गेट स्थापित करके उपयोग किया जाता है लेकिन मुझे एक समाधान मिला है जो एक साथ विधि को अपनाता है उच्चतम रैंक वाले समाधान और दूसरे दोनों से, जो मैंने इसे बनाने के लिए किया था वह नीचे वर्णित है (ध्यान दें कि सी ++ प्रोजेक्ट बनाने जैसे अन्य चरणों को सरलता के लिए अनदेखा किया गया है)

एक बार जब आप C ++ प्रोजेक्ट बना लेते हैं

(1) C / C ++ जनरल -> पथ और प्रतीक -> प्रतीक -> GNU C ++। "जोड़ें ..." पर क्लिक करें और GXX_EXPERIMENTAL_CXX0X को चिपकाएँ ("नाम में दो अंडरस्कोर संलग्न और प्रीपेन्ड करना सुनिश्चित करें") और "मान" रिक्त छोड़ दें।

(2) C / C ++ बिल्ड (प्रोजेक्ट सेटिंग्स पर) के तहत, प्रीप्रोसेसर को पाथ शामिल करें और प्रोवाइडर्स टैब पर जाएं। CDT GCC बिलिन कंपाइलर सेटिंग्स को छोड़कर सभी का चयन रद्द करें। फिर अनटैग शेयर सेटिंग्स प्रविष्टियां…। कंपाइलर स्पेक्स प्राप्त करने के लिए ऑप्शन नामक टेक्स्ट बॉक्स में विकल्प -std = c ++ 11 जोड़ें

केवल 2 और 2 चरणों के ऊपर प्रदर्शन करने के बाद, यह काम करता है, ग्रहण अद्वितीय_प्रति को हल करने में सक्षम है, मुझे नहीं पता कि यह समाधान क्यों काम करता है, आशा है कि यह लोगों की मदद कर सकता है।


इसने मेरे लिए भी काम किया (ग्रहण नियॉन)। पहले तो मैंने अन्य प्रदाताओं को अचयनित नहीं किया, जिसके कारण अभी भी समस्याएं थीं, लेकिन "सीडीटी जीसीसी बिल्ट-इन कंपाइलर सेटिंग्स" और "सीडीटी उपयोगकर्ता सेटिंग्स" के अलावा अन्य सभी प्रदाताओं को रद्द कर दिया। धन्यवाद!
बजे

2

ग्रहण C / C ++ प्रतीक को नहीं पहचानता, std::unique_ptrभले ही आपने C ++ 11 मेमोरी हेडर को अपनी फ़ाइल में शामिल किया हो।

मान लें कि आप GNU C ++ कंपाइलर का उपयोग कर रहे हैं, यह वही है जो मैंने ठीक करने के लिए किया था:

प्रोजेक्ट -> गुण -> C / C ++ जनरल -> प्रीप्रोसेसर में पथ शामिल हैं -> GNU C ++ -> CDT उपयोगकर्ता सेटिंग प्रविष्टियाँ

  1. जोड़ें बटन पर क्लिक करें

  2. ड्रॉपडाउन मेनू से "प्रीप्रोसेसर मैक्रो" का चयन करें

    Name: __cplusplus     Value:  201103L
  3. हिट लागू करें, और फिर अपनी परियोजना पर वापस जाने के लिए ठीक है

  4. फिर आपको C ++ इंडेक्स: प्रोजेक्ट्स -> C / C ++ इंडेक्स -> पुनर्निर्माण करें


यह एकमात्र तरीका है जो मेरे लिए ग्रहण 2018-12 में काम किया। "स्वीकृत" उत्तर आदि, अब 2018-12 में काम नहीं करेंगे।
डेविड स्टीनहॉउर

1

मेरे लिए ग्रहण नियोन पर मैंने ऊपर यहां ट्रिस्मेगिस्टो उत्तर का पालन ​​किया, हां मैंने एक अतिरिक्त कदम भी जोड़ा:

  • प्रोजेक्ट पर जाएँ -> गुण -> C ++ जनरल -> प्रीप्रोसेसर में पथ, मैक्रोज़ आदि शामिल करें -> प्रदाता -> CDT क्रॉस GCC बिल्ट-इन कंपाइलर सेटिंग्स, ध्वज को जोड़ें "-std = c ++ 11"

हिट लागू और ठीक है।

चीयर्स,

लड़का।


0
  • प्रोजेक्ट को राइट-क्लिक करें और "गुण" पर जाएं
  • C / C ++ बिल्ड -> सेटिंग्स -> टूल सेटिंग्स -> GCC C ++ कंपाइलर -> विविध -> अन्य झंडे। पुट -lm को अन्य झंडे टेक्स्ट बॉक्स के अंत में रखें और OK करें।

ग्रहण का यह कौन सा संस्करण है?
Braiam

0

इंडिगो के लिए न तो हैक और न ही क्लीनर संस्करण काम करते हैं। हैक को अनदेखा किया गया है, और आवश्यक कॉन्फ़िगरेशन विकल्प गायब हैं। बिना किसी स्पष्ट कारण के, बिल्ड ने काम नहीं करने के बाद काम करना शुरू किया और कोई उपयोगी कारण प्रदान नहीं किया। कम से कम कमांड लाइन से, मुझे प्रजनन योग्य परिणाम मिलते हैं।


0

एक्लिप्स लूना में C ++ 14 का समर्थन पाने के लिए, आप इन चरणों को कर सकते हैं:

  • में 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" जोड़ें

अपनी परियोजना को फिर से जोड़ें और अंततः ग्रहण को फिर से शुरू करें। यह उम्मीद के मुताबिक काम करना चाहिए।


0

मैं एक मैक पर इस तरह से इसे हल किया। मैंने gcc / g ++ का नवीनतम संस्करण स्थापित करने के लिए Homebrew का उपयोग किया। वे / usr / स्थानीय / बिन में भूमि के साथ / usr / स्थानीय / शामिल हैं।

मैंने CD / usr / लोकल / बिन में CD'd किया और g ++ @ 7whatever से सिर्फ g ++ का सिम्लिंक बनाया, क्योंकि @ बिट कष्टप्रद है।

फिर मैं MyProject -> Properties -> C / C ++ Build -> Settings -> GCC C ++ Compiler में गया और "g ++" से कमांड को "/ usr / लोकल / बिन / g ++" में बदल दिया। यदि आप प्रतीकात्मक लिंक नहीं बनाने का निर्णय लेते हैं, तो आप अधिक विशिष्ट हो सकते हैं।

लिंकर के लिए एक ही काम करो।

लागू करें और लागू करें और बंद करें। इसे सूचकांक को फिर से बनाने दें। थोड़ी देर के लिए, यह एक कठिन संख्या दिखाती है, लेकिन मुझे लगता है कि सूचकांक बनाते समय। जब मैं त्रुटियों का पता लगा रहा था, वे सभी बिना किसी कार्यवाही के गायब हो गए।


मुझे लगता है कि यह सत्यापित किए बिना कि आप ग्रहण -> गुण -> C / C ++ -> Core Build Toolchains में जा सकते हैं और विभिन्न रास्तों से उन्हें संपादित कर सकते हैं, लेकिन मुझे यकीन नहीं है कि वह क्या करेगा।


0

मैं एक मिश्रित सी और सी ++ परियोजना के लिए ग्रहण सी ++ 2019-03 का उपयोग करने के लिए एक समान समस्या थी जो एसटीडी :: वैकल्पिक और एसटीडी :: स्वैप का उपयोग करती थी। मेरे लिए जो काम किया वह यही था। प्रोजेक्ट में गुण-> C / C ++ Build-> Settings-> Tool Settings-> Cross G ++ Compiler, Remove -std = gnu ++ 17 को Multiple से अलग कर लें और इसे Dial-> अन्य Dialect Flags में डालें।


0

क्रॉस कंपाइलर का उपयोग करते समय, मुझे अक्सर उन्नत कस्टम बिल्ड सिस्टम मिलते हैं जो सहकर्मियों द्वारा सावधानीपूर्वक तैयार किए जाते हैं। मैं "Makefile Project with Existing code" का उपयोग करता हूं इसलिए अधिकांश अन्य उत्तर लागू नहीं होते हैं।

परियोजना की शुरुआत में, मुझे यह निर्दिष्ट करना होगा कि मैं "मौजूदा कोड के साथ Makefile प्रोजेक्ट" के लिए विज़ार्ड में एक क्रॉस कंपाइलर का उपयोग कर रहा हूं। कष्टप्रद बात यह है कि पिछले 10 या इतने सालों में, उस विज़ार्ड पर क्रॉस कंपाइलर बटन क्रॉस कंपाइलर नहीं है। तो एक ऐसे चरण में जो C ++ समस्या और क्रॉस कंपाइलर समस्या को ठीक करता है, मुझे ऊपर दिए गए @ravwojdyla जैसे उत्तरों द्वारा उल्लिखित प्रदाताओं टैब पर जाना होगा, लेकिन मुझे जो प्रदाता चुनना है वह क्रॉस-कंपाइलर प्रदाता है। फिर कमांड बॉक्स में मैंने कंपाइलर को पूरा रास्ता दिया और मैं सी + + मानक के लिए -dd = gnu ++ 11 जोड़ता हूं जिसे मैं समर्थन देना चाहता हूं। यह बाहर काम करता है और साथ ही उम्मीद की जा सकती है।

आप इसे किसी मौजूदा प्रोजेक्ट पर कर सकते हैं। केवल एक चीज जो आपको करने की आवश्यकता हो सकती है वह है अनुक्रमणिका को पुन: चलाएँ।

मुझे कभी भी प्रायोगिक ध्वज को जोड़ने या __cplusplus की परिभाषा को ओवरराइड नहीं करना पड़ा है। केवल एक चीज है, अगर मेरे पास आधुनिक सी कोड की पर्याप्त मात्रा है, तो मेरे पास सी-विशिष्ट मानक विकल्प रखने के लिए कहीं नहीं है।

और जब चीजें वास्तव में खराब हो रही हैं, तो पार्सर लॉग प्राप्त करना, इंडेक्सर सबमेनू में उस कमांड का उपयोग करना, बहुत जानकारीपूर्ण हो सकता है।

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