मैं केवल सी ++ (उदा। <cstdlib>
) के लिए विशिष्ट शीर्षलेख फ़ाइलों का उपयोग कर रहा हूं, हालांकि मुझे अभी भी विश्व स्तर पर घोषित फ़ंक्शंस मिलते हैं, और न केवल std
नामस्थान में कार्य करता है। क्या इसे रोकने के लिए कोई तरीका है, शायद एक कंपाइलर स्विच?std namespace के बाहर मानक कार्यों को रोकें
उदाहरण के लिए, निम्न कोड:
> g++ -c main.cpp main.o
main.cpp: In function ‘float random()’:
main.cpp:2:14: error: new declaration ‘float random()’
/usr/include/stdlib.h:327:17: error: ambiguates old declaration ‘long int random()’
या
> clang++ main.cpp -o main.o
main.cpp:2:7: error: functions that differ only in their return type cannot be overloaded
float random() { return 0.0f; }
/usr/include/stdlib.h:327:17: note: previous declaration is here
extern long int random (void) __THROW;
जो कि stdlib.h
के कारण होता है ":
#include <cstdlib>
float random() { return 0.0f; }
int main() { return 0; }
निम्न त्रुटि के साथ लिनक्स के तहत संकलित करने के लिए, विफल प्रदूषित "वैश्विक नामस्थान अपने random
समारोह के साथ।
नोट, कि विजुअल स्टूडियो का उपयोग करते हुए, विंडोज़ पर संकलन करते समय मुझे इन समस्याओं का सामना नहीं करना पड़ रहा है।
ध्यान दें कि 'यादृच्छिक' ** सी मानक पुस्तकालय का हिस्सा नहीं है **। यह कहना नहीं है कि समस्या असली नहीं है। –
@PeteBecker दरअसल, यह [POSIX से] आता है (http://pubs.opengroup.org/onlinepubs/9699919799/functions/random.html)। चीज़ों को भी लायक बनाता है, किसी को केवल सी मानक नामों के लिए ही नहीं देखना चाहिए, बल्कि सभी पॉज़िक्स सामानों के लिए भी देखना है। :( –