क्यों टर्बो सी ++ के साथ एक सरल "हैलो वर्ल्ड" -स्टाइल कार्यक्रम संकलन नहीं है?


101

मैंने अपने प्रोग्रामिंग क्लास के लिए C ++ सीखना शुरू कर दिया है। मैंने यह "हैलो वर्ल्ड" प्रोग्राम डाउनलोड किया है:

#include <iostream>
using namespace std;

int main() 
{
    cout << "Hello, World!";
    return 0;
}

लेकिन टर्बो सी ++ की शिकायत है:

Error D:\HELLO.CPP 1: Unable to open include file 'IOSTREAM'
Error D:\HELLO.CPP 2: Declaration syntax error
Error D:\HELLO.CPP 6: Undefined symbol 'cout'

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


39
यह टर्बो सी ++ समस्याओं के बारे में पूछने वाले प्रश्नों के लिए एक मानक डुप्लिकेट पुनर्निर्देशित करने का इरादा है। इन सवालों में से कई को टिप्पणियों में केवल एक संक्षिप्त विवरण के साथ जल्दी से शूट किया जाता है, जबकि वे वास्तव में एक उचित उत्तर का उपयोग कर सकते हैं। सुधार का स्वागत करते हैं।
एन। 'सर्वनाम' मी।

6
यह उल्लेख करने का सुझाव दें कि आप किस टर्बो टर्बो ++ का उपयोग कर रहे हैं। 2006 के संस्करण को इस कार्यक्रम के साथ जोड़ा गया।
MM

5
"मैंने अपने प्रोग्रामिंग क्लास के लिए C ++ सीखना शुरू कर दिया है।" यह एक झूठ है। अवधि।
बगवाहेल्स94


5
@nm मुझे नहीं पता कि क्या बुग्घेल्स का यह मतलब है, लेकिन मैं उन्हें यह बताने के लिए ले गया कि अगर किसी को TurboC ++ (विशेष रूप से, पुराना TurboC ++ जो इसे संकलित करने में विफल रहता है) सिखाया जाता है , तो वे C ++ (जो बहुत से लोग, मुझे शामिल नहीं कर रहे हैं) सीख रहे हैं। , स्पष्ट रूप से मानक C ++ का अर्थ है)।
एरोरिका

जवाबों:


158

इस कार्यक्रम में कोई समस्या नहीं है। (शायद कुछ शैलीगत मुद्दों को छोड़कर - using namespace stdअनुशंसित नहीं है)। समस्या टर्बो सी ++ के साथ है। यह सॉफ्टवेयर का बहुत पुराना टुकड़ा है। यह C ++ की एक बोली को लागू करता है, जिसे पूर्व-ANSI C ++ कहा जाता है , जो इस सहस्राब्दी की शुरुआत तक पूरी तरह से उपयोग से बाहर हो गया है। C ++ के लिए पहला ANSI मानक 1998 में प्रकाशित हुआ था, तब 2003 संस्करण, 2011 संस्करण, 2014 संस्करण, 2017 संस्करण था, और अब हम 2020 संस्करण को आधिकारिक रूप से प्रकाशित होने की उम्मीद करते हैं। इनमें से प्रत्येक मानक संशोधन से भाषा में अधिक या कम महत्वपूर्ण परिवर्तन आए।

टर्बो सी ++ के लिए आपको इस तरह से कार्यक्रम को संशोधित करना होगा:

#include <iostream.h>      // note the .h suffix
// using namespace std;    // Turbo C++ doesn't implement namespaces

int main() 
{
    cout << "Hello, World!";
    return 0;
}

यदि आप इस कार्यक्रम को देखते हैं, तो आधुनिक C ++ बोली और टर्बो C ++ द्वारा स्वीकार किए गए के बीच का अंतर छोटा लग सकता है। हालांकि यह बहुत बड़ा हो जाएगा क्योंकि आपके कार्यक्रम अधिक जटिल हो जाएंगे।

जब आप टर्बो सी ++ का उपयोग करके प्रोग्रामिंग सीख सकते हैं, तो मैं दृढ़ता से सिफारिश करूंगा कि यदि निम्न समस्याओं के कारण मानवीय रूप से संभव हो तो:

  1. आप एक ऐसी भाषा सीख रहे होंगे जो उद्योग में उपयोग की जाने वाली एक लोकप्रिय भाषा से मिलती-जुलती है, लेकिन फिर भी बहुत अलग है, बिना किसी अच्छे कारण के। यदि आप वास्तविक सॉफ़्टवेयर विकास के लिए C ++ लिखने की योजना बनाते हैं, तो आपको बहुत कुछ सीखना होगा। आधुनिक C ++ सीखना अभी बहुत आसान है।
  2. टर्बो सी ++ के बारे में कोई अतिरिक्त साहित्य नहीं है। C ++ सामग्री का लगभग 100% आप इंटरनेट पर या पुस्तकों में पाएंगे, सीधे बॉक्स से बाहर टर्बो सी ++ पर लागू नहीं होता है। कुछ को केवल मामूली अनुकूलन की आवश्यकता होगी, जबकि अन्य सामग्री पूरी तरह से अनुपयोगी है। बहुत ही मदद का एकमात्र स्रोत आपके लिए तुरंत उपलब्ध बिल्ट-इन टर्बो सी ++ मदद है।
  3. कुछ लोगों को टर्बो सी ++ याद है। मंचों पर प्रश्न पूछते समय, हमेशा निर्दिष्ट करें कि आप भाषा के आधुनिक संस्करण की ओर प्रतिक्रिया व्यक्त करने के लिए पूर्व-ANSI बोली का उपयोग कर रहे हैं। आपको संभवतः टिप्पणियों का एक गुच्छा मिलेगा जो आपको तुरंत रोकने और प्रत्येक प्रश्न के साथ एक आधुनिक संकलक पर स्विच करने का सुझाव देता है।

कई आधुनिक मुफ्त ( बीयर में , साथ ही भाषण में ) कंपाइलर और आईडीई हैं जो आप टर्बो सी ++ के स्थान पर उपयोग कर सकते हैं। इनमें से कुछ में शामिल हैं:

  1. विजुअल C ++ कम्युनिटी एडिशन एक IDE और Microsoft का एक कंपाइलर है
  2. कोड :: ब्लॉक एक हल्का आईडीई है। विंडोज पर यह कुछ हद तक पुराने संकलक के साथ जहाज करता है, लेकिन आप स्वयं एक अधिक आधुनिक संकलक स्थापित कर सकते हैं
  3. ग्रहण सीडीटी एक शक्तिशाली क्रॉस-प्लेटफॉर्म आईडीई है। यह अपने स्वयं के संकलक के साथ जहाज नहीं करता है इसलिए आपको एक अलग संकलक स्थापित करने की आवश्यकता है। विंडोज पर, उदाहरण के लिए MinGW का उपयोग करें ।
  4. बहुत सारी
  5. इसके अलावा, कई ऑनलाइन कंपाइलर हैं जैसे कि http://ideone.com , https://www.onlinegdb.com/ और http://coliru.stacked-crooked.com/ , और भी कई (ये ज्यादातर अच्छे हैं विचारों को आज़माने और बहुत छोटे कार्यक्रम लिखने के लिए)।
  6. दोनों बजना / LLVM और जीसीसी हैं मुफ्त सॉफ्टवेयर सी ++ के हाल के संस्करणों का समर्थन compilers।

अफसोस, कुछ स्कूल / शिक्षक इस दिन और उम्र में भी छात्रों को टर्बो सी ++ का उपयोग करने के लिए मजबूर करते हैं। दुर्भाग्य से यह ऐसा कुछ नहीं है जिसे यह समुदाय ठीक कर सकता है। यदि आप इस स्थिति में खुद को पाते हैं, तो बाहर की मदद पाने में सक्षम नहीं होने के लिए तैयार रहें।


7
@ Rakete1111 मुझे लगता है कि यह इस अर्थ में अधिक है "इस कार्यक्रम में वर्तमान मानक के अनुसार कोई समस्या नहीं है।" चाहे वह अच्छी प्रोग्रामिंग शैली हो, दूसरी बात है।
सोम्ब्रेरो चिकन

21
@ Rakete1111 जिम्मेदार उपयोग के साथ कुछ भी गलत नहीं है using namespace std। यह नए प्रोगामर्स को पढ़ाने के लिए एक अच्छा शैक्षणिक निर्णय हो सकता है या नहीं भी हो सकता है, लेकिन यह नैतिक रूप से गलत नहीं है।
एन। 'सर्वनाम' मी।

10
मैं मानता हूं कि using namespace stdयह बुरी प्रथा है, लेकिन मुझे लगता है कि यह इस सवाल में है, क्योंकि C ++ हैलो वर्ल्ड प्रोग्राम आपको ऑनलाइन मिलता है, लगभग हमेशा ऐसा करते हैं। इसलिए यह स्पष्ट होना जरूरी है कि टर्बो सी ++ को दुखी करने वाली बात नहीं है। शायद इसके बजाय "इस कार्यक्रम के साथ कोई समस्या नहीं है" कहते हैं "यह कार्यक्रम वर्तमान सी ++ मानक के अनुसार मान्य है ; इसे संकलन करना चाहिए।"
ज़ूल

5
@ समान टोकन से, मानक कार्यों के लिए सभी कॉल गैर-जिम्मेदार हैं, क्योंकि आपको नहीं पता कि नए अधिभार क्या जोड़े जाएंगे। आपको यह भी पता नहीं है कि अगले मानक से भाषा की कौन-सी विशेषताएँ गायब हो जाएंगी या अर्थ बदल जाएगा। सभी कार्यक्रमों को दशकों तक रहने या मनमाने संकलक के लिए पोर्टेबल होने की आवश्यकता नहीं है।
एन। 'सर्वनाम' मी।

6
"कुछ लोग टर्बो सी ++ को याद करते हैं" मैं असहमत हूं। कम से कम एक संपूर्ण, बड़े देश को आज सक्रिय रूप से पढ़ाया जा रहा है
को ऑर्बिट

11

"टर्बो सी ++" का अर्थ कई संकलक हो सकते हैं। यह प्रश्न पूछते समय, संस्करण संख्या को शामिल करना महत्वपूर्ण है।

  • संस्करण 3.1 तक बोरलैंड टर्बो सी ++ क्लासिक ब्लू बैकग्राउंड आईडीई में शुद्ध एमएस डॉस कंपाइलर थे। ये लगभग 1989 से 1992 के बीच कहीं जारी किए गए थे, C ++ से बहुत पहले मानकीकृत हो गए थे, जो कि वर्ष 1998 में हुआ था। और इसलिए उन्होंने C ++ की पूर्व-मानक बोली का उपयोग किया।

    सबसे विशेष रूप से वे #include <iostream.h>मानक के बजाय वाक्यविन्यास का उपयोग करते थे #include <iostream>, लेकिन सी ++ सुविधाओं की एक पूरी श्रृंखला को कवर नहीं किया जैसे कि नामस्थान, टेम्पलेट आदि। टेम्पलेट लाइब्रेरी एसटीएल अभी तक मानक का हिस्सा नहीं था, इसलिए उस पुस्तकालय से संबंधित सब कुछ बहुत सुंदर था। बाद में जो मानक था, उससे अलग है।

  • बाद में 90 के दशक में, बोरलैंड ने कई डीओएस / विंडोज कंपाइलरों को बेहतर अनुरूपता के साथ जारी किया। संस्करण 5 तक कहीं वे अभी भी C ++ 98 के लिए पूर्ण अनुरूपता के साथ संघर्ष कर रहे थे, हालांकि ये विंडोज संस्करण इसके काफी करीब थे।

  • 90 के दशक के उत्तरार्ध में, उन्होंने बोरलैंड C ++ बिल्डर के पक्ष में "टर्बो सी ++" नाम छोड़ दिया, जो न केवल एक आईडीई था, बल्कि डेल्फी पर आधारित एक संपूर्ण आरएडी उपकरण भी था। ये संकलक पूरी तरह से C ++ 98 और बाद में C ++ 03 के अनुरूप थे।

  • 2005 के आसपास, बोरलैंड ने अपने उत्पाद लाइन के हिस्से के रूप में संकलक गिरा दिए। संकलक "कोडगियर" बन गए, जो बाद में एम्बरकैडरो बन गए। तब कहीं आसपास, उन्होंने बोरलैंड बिल्डर का एक मुक्त संस्करण जारी किया जिसे उन्होंने "टर्बो सी ++" नाम दिया। यह संस्करण पूरी तरह से C ++ 03 के अनुरूप था।

  • आजकल इन कंपाइलरों को Embarcadero C ++ बिल्डर कहा जाता है। मेरा मानना ​​है कि वे वर्तमान में कुछ C ++ 14 के साथ C ++ 11 का समर्थन करते हैं। अधिक जानकारी यहाँ।

कहने की जरूरत नहीं है, एक छात्र के रूप में आपको आधुनिक कंपाइलर के अलावा कुछ भी उपयोग नहीं करना चाहिए। वर्ष 2018 में C ++ सीखने पर 1991 से MS DOS कंपाइलर्स का उपयोग करना केवल पागलपन है। न केवल यह काउंटर-उत्पादक है, यह सीधे हानिकारक है और यह आपको एक बुरा C ++ प्रोग्रामर बना देगा। यदि आपका स्कूल आपको टर्बो सी ++ 3.1 या पुराने का उपयोग करने के लिए मजबूर कर रहा है, तो आपका स्कूल खराब है और आपके शिक्षक गंभीर रूप से अक्षम हैं। कृपया इस पोस्ट को उनके और उनके प्रिंसिपल से लिंक करें।


2020 में भारत में टर्बो सी ++ अभी भी आम हैअधिक से अधिक - "यह 40 वर्ष पुराना है टर्बो सी। भारतीय कॉलेज अभी भी इसे पढ़ाते हैं और कुछ भी सिखाने से मना करते हैं। उन्होंने मुझे शून्य अंक दिए, क्योंकि मैंने परीक्षा के std::stringबजाय इसका उपयोग किया था char *, क्योंकि वे नहीं जानते कि C ++ मानकीकृत है और char *पदावनत किया गया है।"
पीटर मोर्टेंसन

@PeterMortensen हाँ ... यह C90 सिखाने के लिए कुछ हद तक ठीक है (आश्चर्यजनक रूप से, यह अभी भी 2020 के विज़ुअल स्टूडियो की तुलना में बेहतर है), लेकिन इसका इस्तेमाल किया गया C ++ बोली सिर्फ haywire था।
लुंडिन

7

टर्बो सी ++ बहुत पुराना कंपाइलर है और यह जीएनयू सी ++ कंपाइलर से थोड़ा अलग है। कोड आप जीएनयू संकलक के साथ पूरी तरह से काम करेगा लेकिन टर्बो सी के साथ इसे चलाने के लिए साझा ++ आप कुछ बदलाव करने की जरूरत:

से 1. बदलें हेडर फाइल के नाम iostreamकरने के लिए iostream.h
2. और लाइन "नाम स्थान एसटीडी का उपयोग करते हुए" को दूर यह नहीं है टर्बो सी ++ में आवश्यक। यहाँ संशोधित कोड है:

#include <iostream.h>

int main() 
{
  cout << "Hello, World!";
  return 0;
}

6
आपका उत्तर क्या जोड़ता है कि स्वीकृत व्यक्ति नहीं करता है?
Rakete1111

7
जिन लोगों के पास लंबे उत्तर पढ़ने का समय नहीं है उनके लिए जिस्ट।
यगवंश ठाकुर

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