2012-07-10 13 views
7

में प्रकारों को हल नहीं कर सकता है मैंने हाल ही में एक्लिप्स 3.6 से ग्रहण 3.7 में बदल दिया है, जिसे मैं उबंटू 11.04 में सी ++ विकास के लिए उपयोग कर रहा हूं।ग्रहण 3.7 सी ++ संपादक

संस्करण 3.6 के साथ मुझे कोई बड़ी परेशानी नहीं थी, सिवाय इसके कि मुझे हमेशा सूचकांक के साथ कुछ समस्याएं थीं। अब संस्करण 3.7 के साथ यह अनसुलझे प्रकारों को त्रुटियों के रूप में चिह्नित करना शुरू करता है। चूंकि सूचकांक मुझे और भी नापसंद करता है, इसलिए मेरी ग्रहण स्पष्ट रूप से uint16_t या size_t जैसे प्रकारों को नहीं जानता है।

कोड संपादक में प्रदर्शित त्रुटियों के विपरीत, मेरे कंपाइलर को कोड को संकलित करने और सभी प्रतीकों और प्रकारों को हल करने में कोई समस्या नहीं है, इसलिए यह आईडीई की समस्या है।

क्या इस व्यवहार से बचने के कोई तरीके हैं, क्योंकि सभी लाल रेखांकित मेरे कोड को अधिक से अधिक अपठनीय बनाते हैं ...?

अद्यतन:

कुछ शोध और डेनिस से जवाब मुझे पता चला कि मैं जब से मैं एक I32 लक्ष्य के बजाय एक PowerPC के लिए निर्माण कर रहा हूँ Project Properties/ C/C++ General/ Paths and Symbols

करने के लिए कुछ रास्तों को जोड़ने की आवश्यकता के साथ ठीक है , मैं सिर्फ /usr/include नहीं जोड़ सकता। इसके बजाय मैं सभी मानक हेडर (जैसे stdint.h) के लिए

/usr/powerpc-linux-gnu/libc/usr/include

जोड़ने की जरूरत है। इसके अलावा, मैं की जरूरत:

/usr/lib/gcc/powerpc-linux-gnu/4.5.1/include

stdarg.h के लिए।

अब लगभग सभी त्रुटियां चली गई हैं। हेडर stdio.h से एकमात्र फ़ंक्शन जो अभी भी मुझे परेशान करता है printf है। मैंने इसे देखा और हेडर फ़ाइल स्वयं शामिल पथों के भीतर है। फिर भी मुझे एक त्रुटि मिलती है जो Function printf could not be resolved कहती है। मैं फिर से ध्यान देना चाहता हूं कि ये केवल ग्रहण द्वारा प्रदर्शित त्रुटियां हैं - संकलन स्वयं ठीक काम करता है।

तो यह वास्तव में 3 प्रश्न फेंकता है:

  1. परियोजना गुण में Paths and Symbols अनुभाग coheres साथ C++ Build/Settings/C++ Includes खंड से बाहर पथ शामिल हैं। इसका मतलब है कि उन वर्गों में से किसी एक में पथ जोड़ने/हटाने से सीधे दूसरों की प्रविष्टि प्रभावित होती है। चूंकि C++ Includes सीधे कंपाइलर के साथ समेकित है, इसलिए मुझे आश्चर्य है कि क्यों संकलक सही तरीके से संकलित कर सकता है (और हेडर पाता है) भले ही वे उसे पथ के रूप में पास न करें? क्या कोई मानक पथ जीसीसी उपयोग करता है, जिसे मैं नहीं जानता?

  2. ग्रहण में उन्हें printf क्यों नहीं मिला? हेडरफ़ाइल stdio.h शामिल है और इसमें printf की घोषणा भी शामिल है - तो ग्रहण कोड संपादक मुझे क्यों बताता है कि यह इसे हल नहीं कर सकता है?

  3. हेडर फ़ाइलों को इतना विभाजित क्यों किया जाता है? मुझे पता है कि अगर मैं किसी अन्य ट्रैगेट (उदाहरण के लिए पावरपीसी) के लिए निर्माण कर रहा हूं तो मुझे अन्य हेडर फाइलों की आवश्यकता है - लेकिन जीएनयू जीसीसी ने उन शीर्षकों को अलग-अलग डीआईआर में क्यों अलग किया है?

उत्तर

3

आम प्रकारों के लिए लाल रेखांकन आमतौर पर आपके शामिल पथ में आपकी मानक लाइब्रेरी नहीं होने के कारण होता है। अपनी परियोजना के लिए अपने शामिल देखें ... वे परियोजना गुणों में हैं। सुनिश्चित करें कि आपके सी ++ में एक प्रविष्टि है जो आपके द्वारा उपयोग किए जा रहे कंपाइलर के लिए C++ मानक libs फ़ोल्डरों से मेल खाती है।

+0

मैं powerpc-linux-gnu-g ++ कंपाइलर का उपयोग कर रहा हूं। मेरे सी ++ बिल्ड सेटिंग्स में मैंने पथ को शामिल किया है ('/ usr/powerpc-linux-gnu/include/C++/4.5.1')। इस पथ में मैंने परियोजना में पथ भी शामिल किए हैं ... दुर्भाग्यवश कुछ भी नहीं बदले .. – Toby

+0

'size_t' को '' में परिभाषित किया गया है। यदि आप इसे # अपनी फ़ाइल में शामिल करते हैं तो देखें कि क्या यह लाल रेखाएं दूर हो जाती है। यदि नहीं, तो देखें कि '# शामिल ' पीले रंग की रेखा के साथ रेखांकित है। यदि ऐसा हो तो होवर करें, और यदि यह कहता है कि यह नहीं मिल रहा है तो आपको अपने शामिल सेटअप के साथ कोई समस्या है। अपनी परियोजना के लिए इंडेक्स को फिर से बनाने का प्रयास करें। – Dennis

+0

हाय डेनिस, आपके इनपुट के लिए धन्यवाद - मैंने अभी सवाल को थोड़ा सा अद्यतन किया है। शायद आप मेरी मदद कर सकते हैं। – Toby

3

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

मैं फेडोरा और परेशानियों से चल रहा हूं, इसमें stddef.h फ़ाइल है/usr/include/linux .... जो वास्तव में खाली है। तो भले ही मेरे पास पथ शामिल करने में कंपाइलर का stddef.h था, सूचकांक वास्तव में इस अन्य खाली फ़ाइल को पार्स कर रहा था। तो क्या किया की जरूरत थी:

उपसर्ग अपने रास्तों और प्रतीकों संकलक विशिष्ट साथ सूची पथ शामिल (मेरे मामले में यह /usr/lib/gcc/x86_64-redhat-linux/4.7.2/include/ था) पार्स किए जाने से अन्य खाली stddef.h से बचने के लिए।

+0

उपसर्ग महत्वपूर्ण है। मेरे पास /usr/lib/gcc/x86_64-redhat-linux/4.7.2/include/ शामिल था लेकिन यह नीचे है और इसे स्थानांतरित नहीं किया जा सकता है। मुझे एक और प्रविष्टि जोड़नी पड़ी और इसे काम करने के लिए इसे शीर्ष पर ले जाना पड़ा। स्पष्ट रूप से सूची में अन्य निर्देशिकाओं में एक गलत संस्करण है जो चीजों को गड़बड़ कर देता है। – fchen

0

मैं एआरएम कंपाइलर (आर्म-नो-एबी, 4.4.1) के साथ ग्रहण (मंगल .1 रिलीज 4.5.1, बिल्ड आईडी: 20150 9 24-1200) का उपयोग कर रहा हूं। मुझे आपके जैसा ही समस्या थी। मेरे पूर्व पथ था: (: 'तय' पोस्टफ़िक्स) संकलक निर्देशिका में:

D:\test\CodeSourcery\Sourcery G++ Lite\lib\gcc\arm-none-eabi\4.4.1\include 

फिर मैं एक और निर्देशिका में शामिल की खोज की

D:\test\CodeSourcery\Sourcery G++ Lite\lib\gcc\arm-none-eabi\4.4.1\include-fixed 

यह तय मेरे सभी त्रुटियों की समाप्ति प्रकार-गलत पहचान (उदाहरण के लिए uint16_t)।

संबंधित मुद्दे