2014-09-15 11 views
6

तो मेरे सीएसई पाठ्यक्रम में हमें अपने कार्यक्रमों के लिए अभी उपयोग करने के लिए एक हेडर फ़ाइल दी गई है जिसे हम लिख रहे हैं।सी ++ में संकलित 14

दुर्भाग्य से मैं उस शीर्षलेख का उपयोग करके संकलन करने के लिए टर्मिनल नहीं प्राप्त कर सकता, यह कुछ त्रुटियां देता है (केवल 'g ++' के साथ संकलित)। साथ ही, जब मैं अपने विश्वविद्यालय में हूं और मैं पुटी का उपयोग कर रहा हूं तो मुझे इस हेडर का उपयोग करते समय एक ही त्रुटि मिलती है। हालांकि, जब मैं 'g ++ -std = C++ 14' के साथ संकलित करता हूं तो मुझे त्रुटियां नहीं मिलती हैं।

मैंने अपने मैक पर टर्मिनल पर इस कमांड के साथ संकलन करने का प्रयास किया है, लेकिन यह कहता है कि यह C++ 14 भाग को नहीं पहचानता है।

dhcp-10-202-147-243:hw1pr1 Admin$ g++ -std=c++14 hw1pr1.cpp 
error: invalid value 'c++14' in '-std=c++14' 

इस काम में मुझे यह कैसे मिल सकता है इस पर कोई मदद की सराहना की जाएगी। उम्मीद है कि यह सब कुछ समझ में आया है।

यहां त्रुटि है जब मैं हेडर फ़ाइल के साथ संकलित करता हूं, मैं केवल टर्मिनल में जी ++ के साथ बात कर रहा हूं।

/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../lib/c++/v1/ext/hash_map:212:5: warning: 
     Use of the header <ext/hash_map> is deprecated. Migrate to <unordered_map> 
     [-W#warnings] 
# warning Use of the header <ext/hash_map> is deprecated. Migrate to ... 
    ^
In file included from read_first_name.cpp:1: 
./std_lib_facilities_4.h:43:20: error: no matching function for call to object 
     of type 'hash<char *>' 
      return hash<char*>()(s.c_str()); 
        ^~~~~~~~~~~~~ 
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../lib/c++/v1/ext/__hash:39:12: note: 
     candidate function not viable: 1st argument ('const value_type *' 
     (aka 'const char *')) would lose const qualifier 
    size_t operator()(char *__c) const _NOEXCEPT 
     ^
In file included from read_first_name.cpp:1: 
./std_lib_facilities_4.h:112:8: warning: comparison of unsigned expression < 0 
     is always false [-Wtautological-compare] 
       if (i<0||size()<=i) throw Range_error(i); 
        ~^~ 
./std_lib_facilities_4.h:118:8: warning: comparison of unsigned expression < 0 
     is always false [-Wtautological-compare] 
       if (i<0||size()<=i) throw Range_error(i); 
        ~^~ 
3 warnings and 1 error generated. 

यह त्रुटि नहीं होता है और जब मैं पुट्टी और प्रयोग 'जी ++ एसटीडी = C++ 14' सी ++ मानकों के बीच परिवर्तन का

+0

क्या हेडर फ़ाइल पोस्ट करना संभव होगा, या यह बहुत लंबा है? – APerson

+6

संकलक अद्यतन होने तक '-std = C++ 1y' आज़माएं। चूंकि इस प्रारंभिक मसौदे को असाधारण रूप से अच्छी तरह से ट्रैक किया गया था और यह अंतिम मानक के समान ही है, जो पर्याप्त होना चाहिए। – Deduplicator

+0

आपको कंपाइलर के अपने संस्करण द्वारा समर्थित मानक के संस्करणों की जांच करनी चाहिए। – Angew

उत्तर

4

नहीं है बहुत सारे कार्यक्रम पूरी तरह से संकलित कर देगा, तो क्या में मान्य है एक संशोधन दूसरे में नहीं होना चाहिए।

g++ defaults to -std=gnu++98 for C++, जो दशकों पुराना सी ++ 98-मानक जीएनयू एक्सटेंशन के साथ बढ़ाया गया है (जिनमें से अधिकांश अनुरूप हैं)।

उचित संशोधन चुनें: -std=c++1y -pedantic सी ++ 14 के बहुत नज़दीक अनुमान है।

What changes introduced in C++14 can potentially break a program written in C++11?

+0

मैंने '-std = C++ 1y -pedantic' का उपयोग किया और यह दुर्भाग्यवश, मैंने पहले उल्लिखित त्रुटियों के साथ आया था। – Joe

+0

क्या आपका शीर्षक है "std_lib_facilities_4.h"? एक अप्रचलित मानक आज़माएं। – Deduplicator

+0

ये कंपाइलर विकल्प '-std = C++ 1y -pedantic' क्लैंग 3.6 का उपयोग करके मेरे लिए बहुत अच्छा काम करता है, आपके उत्तर के लिए धन्यवाद। –

1

आप क्या कहते हैं आप का उपयोग करें और है कि सीपीपी फ़ाइल का नाम प्रारूप करने के लिए आ रही हैं, को देखते हुए, मुझे लगता है कि मैं एक ही कक्षा में हूँ। एक साल बाद, ऐसा लगता है, लेकिन यहां संग्रह के लिए मेरा समाधान है:

std_lib_facilities.h शीर्षलेख Bjarne Stroustrup पाठ्यपुस्तक के साथ आता है, "प्रोग्रामिंग: सिद्धांत और अभ्यास C++ का उपयोग करना"। उन लोगों के लिए अनजान, बजेर्न स्ट्राउस्ट्रप ने सी ++ का आविष्कार किया (उनके पास एक अच्छा विचार है कि वह किस बारे में बात कर रहा है)। संयोग से, पुस्तक सी ++ सीखने का शानदार तरीका है, अगर कोई इसे वास्तव में पढ़ने के लिए समय लेता है। Std_lib_facilities.h शीर्षलेख सी ++ में शुरुआती लोगों के लिए एक सुविधाजनक हेडर फ़ाइल है, जिसमें पाठ्यपुस्तक में उपयोग की जाने वाली सभी प्रमुख मानक पुस्तकालयों के साथ-साथ कुछ सहायक फ़ंक्शन जो संभावित गलतियों या त्रुटियों के लिए खाते की सहायता करते हैं, या सीखने के लिए सुविधाजनक हैं (जैसे एक त्रुटि() फ़ंक्शन जो छात्र के लिए सरल अपवाद फेंकने, या वैक्टरों के लिए "सीमा से बाहर" चेक जोड़ता है)। यह आखिरकार हेडर के बारे में विशिष्ट जानकारी सीखने के बिना छात्रों को कोड में सही होने की अनुमति देने का एक तरीका है। स्ट्राउस्ट्रप सी ++ के साथ अपडेट रहता है और इस प्रकार कई पुस्तकालयों को शामिल करता है जिन्हें सी ++ 11 मानक की आवश्यकता होती है। सीएससीई विभाग अपने छात्रों को (कम से कम इस प्रारंभिक कक्षा में) विभाग के यूनिक्स सिस्टम से कनेक्ट करने और वहां से संकलित करने के लिए चाहता है ताकि संकलक डाउनलोड और अपडेट करने में भ्रम से बच सकें।

मुझे पहले से ही कुछ सी ++ कक्षाएं मिलीं, और इस प्रकार पहले से ही मेरे उबंटू लैपटॉप पर जी ++ स्थापित हो गया था। मैंने std_lib_facilities को यथासंभव लंबे समय तक टाल दिया क्योंकि मुझे विषय निर्माता जो के समान त्रुटि मिल रही थी, जहां g ++ ने "C++ 11" भाग को पहचाना नहीं था (मैन्युअल रूप से आवश्यक पुस्तकालयों सहित मैन्युअल रूप से ठीक काम किया जब तक कि हमें इसका उपयोग नहीं करना पड़ा पाठ्यपुस्तक से कक्षा जो शीर्षलेख के सहायक कार्यों में से एक का उपयोग करती है)। आखिरकार, मुझे ऑनलाइन एक सहायता विषय मिला जिसने मुझे अपने जी ++ कंपाइलर को 4.7 या उससे अधिक तक अपडेट करने की सलाह दी, क्योंकि 4.6 और निचले हिस्से में सी ++ 11 (या, ज़ाहिर है, सी ++ 14) के लिए समर्थन नहीं है।मैक या विंडोज़ पर अपडेट किए जाने वाले अपडेट की तुलना में यह अजीब रूप से शामिल था, और मुझे संदेह है कि सटीक प्रक्रिया लागू होगी, लेकिन यह समस्या थी (थी?) समस्या: यह जी ++ का पुराना संस्करण है, और इसे एक सी ++ 11 और बाद में संकलित करने के लिए अद्यतन करें। मैं मैक के लिए g ++/gcc को अपडेट करने के तरीकों की खोज करने की सलाह देता हूं।

यह जानना चाहिए कि इस समस्या के साथ कोई और इस पर ठोकर खा रहा है और अभी तक उनकी समस्या हल नहीं हुई है।

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