पर जीसीसी के साथ std :: cout का उपयोग करने में समस्या मैं सी ++ प्रोग्रामिंग के लिए नया हूं और मैं टर्मिनल में जीसीसी का उपयोग कर मैक पर अपना पहला अभ्यास करने की कोशिश करता हूं।सी ++: मैक ओएसएक्स
दुर्भाग्य से, मैं iostream से संबंधित मुद्दों के कारण संकलित नहीं कर सकता। के रूप में एक साधारण प्रोग्राम के साथ:
#include "<"iostream">"
int main()
{
std::cout << "hello world";
std::cout << endl;
return 0;
}
यह मुझे त्रुटि देता है:
error: ‘endl’ was not declared in this scope
अदालत < < endl को हटाने; लाइन मुझे ये त्रुटियां देती है:
Undefined symbols:
"___gxx_personality_v0", referenced from:
___gxx_personality_v0$non_lazy_ptr in cceBlyS2.o
"std::ios_base::Init::~Init()", referenced from:
___tcf_0 in cceBlyS2.o
"std::basic_ostream<char, std::char_traits<char> >& std::operator<< <std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*)", referenced from:
_main in cceBlyS2.o
"std::ios_base::Init::Init()", referenced from:
__static_initialization_and_destruction_0(int, int)in cceBlyS2.o
"std::cout", referenced from:
__ZSt4cout$non_lazy_ptr in cceBlyS2.o
ld: symbol(s) not found
collect2: ld returned 1 exit status
यह स्पष्ट है कि iostream शीर्षलेख ठीक से लिंक नहीं है। मैंने बिना किसी सफलता के "<" iostream.h ">" और "iostream.h" की कोशिश की।
क्या किसी के पास कोई संकेत है जो मेरी मदद कर सकता है? धन्यवाद!
यह नामस्थान के उद्देश्य से 'नामस्थान std :: x;' के लिए नाम दिया गया है, जिसे किसी दिए गए 'x' के लिए उपयोग किया जाना चाहिए, जिसे आप पूरे नामस्थान को दायरे में लाने के बजाय पहुंचने की आवश्यकता है। –
@ क्रिस: मैं असहमत हूं। जबकि मैं निश्चित रूप से * हेडर फ़ाइल * में 'नेमस्पेस std;' जैसे कुछ से बचूंगा, मुझे लगता है कि यह एक स्रोत फ़ाइल के अंदर बिल्कुल ठीक है, विशेष रूप से इस तरह एक सरल। मुझे स्रोत फ़ाइल को 'std ::' के साथ पूरी जगह तक प्रदूषित करने का कोई कारण नहीं दिखता है जब तक कि यह बिल्कुल जरूरी नहीं है। मैं कभी भी ऐसे नाम का दोबारा उपयोग नहीं करना चाहूंगा जो पहले ही एसटीएल में इस्तेमाल किया गया था। पूरे नामस्थान में लाने से मुझे इस तरह की गलती जल्दी मिल जाएगी। –
@ ई.जेम्स: इसके साथ एक मामूली समस्या है: आपको नहीं पता कि 'std' नेमस्पेस में क्या है - यह कार्यान्वयन के बीच भिन्न हो सकता है और करता है। आप मनमाने ढंग से समय के लिए कुछ ठीक काम कर सकते हैं, और फिर एक अलग (ए) संस्करण संकलक पर काम करना छोड़ दें। माना जाता है कि * इस * मामले में, जहां * केवल * नाम जिसे आप परिभाषित कर रहे हैं वह 'मुख्य' है, वहां बहुत कुछ गलत नहीं हो सकता है - लेकिन जब आप उससे अधिक कुछ करते हैं, तो यह एक पूरी कहानी है। –