के एक सदस्य मैं लिनक्स में मेरा कार्यक्रम संकलन नहीं है - यह निम्न पंक्ति है:'sqrt' 'एसटीडी'
std::sqrt((double)num);
खिड़कियों पर यह ठीक है, लेकिन लिनक्स पर मैं 'sqrt' नहीं है 'std' के सदस्य में मेरे पास math.h
के साथ कोई समस्या है?
के एक सदस्य मैं लिनक्स में मेरा कार्यक्रम संकलन नहीं है - यह निम्न पंक्ति है:'sqrt' 'एसटीडी'
std::sqrt((double)num);
खिड़कियों पर यह ठीक है, लेकिन लिनक्स पर मैं 'sqrt' नहीं है 'std' के सदस्य में मेरे पास math.h
के साथ कोई समस्या है?
निर्देश को #include <cmath>
पर बदलें। फॉर्म <cxxxxxxx>
के सी ++ शीर्षलेख std
नामस्थान में मानक नाम होने की गारंटी है (और वैकल्पिक रूप से उन्हें वैश्विक नामस्थान में प्रदान कर सकते हैं)। <xxxxxx.h>
नहीं हैं।
'C++ 11' से पहले std namespace में मानक नाम होने की गारंटी है। बेशक कारण 11 के लिए आराम किया गया था कि कुछ कार्यान्वयन कभी परेशान नहीं था। – BoBTFish
@BoBTFish अभी भी 'std' नेमस्पेस में मानक नाम होने की गारंटी है। प्री सी ++ 11, इसे वैश्विक नामस्थान में रखने के लिए _not_ की गारंटी भी थी। सी ++ 11 उन्हें वैश्विक नामस्थान में भी रहने की अनुमति देता है, क्योंकि यह सबसे व्यापक मौजूदा अभ्यास था। –
@BoBTFish जेम्सकांज ने क्या कहा, 17.6.1.2/4 देखें। – jrok
यह केवल इसलिए है क्योंकि <math.h>
namespace std
में फ़ंक्शंस घोषित नहीं करता है। इसे केवल संगतता कारणों के लिए सी ++ मानक में शामिल किया गया है। सही सी ++ में <cmath>
होगा।
§D.5,2
हर सी हैडर, जिनमें से प्रत्येक प्रपत्र
name.h
का एक नाम है, बर्ताव करता है के रूप में प्रत्येक नाम इसीcname
हैडर द्वारा मानक पुस्तकालय नाम स्थान में रखा है अगर वैश्विक नामस्थान क्षेत्र के भीतर रखा गया है। यह निर्दिष्ट नहीं है कि इन नामों को नामस्थानstd
के नेमस्पेस दायरे में पहली बार घोषित या परिभाषित किया गया है और फिर स्पष्ट का उपयोग करके वैश्विक नामस्थान स्कोप में इंजेक्शन दिया गया है-घोषणाएं।
कि आपका कोड विंडोज़ के तहत काम करता है वह शुद्ध भाग्य था - अगर आप इसे कॉल करना चाहते हैं। अंतिम वाक्य विंडोज के तहत क्या हो सकता है, लेकिन लिनक्स के तहत नहीं हो सकता है: विंडोज़ के तहत, स्पष्ट रूप से नाम वैश्विक नामस्थान और नामस्थान std
दोनों में मान्य हैं।
'
@JamesKanze सुधार के लिए धन्यवाद, मुझे इसके बारे में पता नहीं था। मैंने अपना जवाब बदल दिया। –
क्या आपने '' शामिल किया था? –
juanchopanza
'#' शामिल करें, http://en.cppreference.com/w/cpp/numeric/math/sqrt – hmjd