2013-04-05 6 views
11

साझा हेडर।वैश्विक स्थिरांक के लिए "स्थिर" की आवश्यकता क्यों है लेकिन बूल के लिए नहीं?

मैं यह कर सकता: जब एक से अधिक फ़ाइलों में शामिल

const bool kActivatePlayground=false;

ठीक काम करता है।

मैं ऐसा नहीं कर सकते:

त्रुटि में

const char * kActivePlayground = "kiddiePool";

परिणाम: डुप्लिकेट प्रतीकों।

लेकिन यह काम करता है:

static const char * kActivePlayground = "kiddiePool";

staticconst char * के लिए लेकिन const bool के लिए नहीं की जरूरत क्यों है? इसके अतिरिक्त, मैंने सोचा कि static आवश्यक नहीं है क्योंकि const हमेशा static निहितार्थ है?

+0

स्थैतिक उस टीयू के लिए एक प्रतीक निजी बनाता है। त्रुटि से, क्या आपने सुनिश्चित किया है कि किसी अन्य फ़ाइल में कॉन्स्ट char * का कोई पुनर्वितरण नहीं है? –

+0

यह वैरिएबल नाम – johnbakers

+0

की एकमात्र परिभाषा है, फिर से पुन: पुन: पुन: पुन: पुन: पुन: पुन: पुन: पुन: पुन: पुन: पुन: पुन: पुन: पुन: पुन: पुन: पुनरावृत्ति है, वैसे भी 'स्थिर' शब्द का उपयोग 'स्थिर' शब्द का उपयोग भी आवश्यक नहीं होना चाहिए, जैसा कि यह नहीं है 'बूल' – johnbakers

उत्तर

26

सी ++ में, const डिफ़ॉल्ट रूप से चर स्थिर स्थिरता है, जबकि गैर-const चर के बाहरी संबंध हैं।

कई परिभाषाएं त्रुटि के लिए कारण यह है कि

const char * kActivePlayground = "kiddiePool"; 

बाहरी लिंकेज के साथ एक चर बनाता है।

अरे प्रतीक्षा करें, क्या मैंने अभी यह नहीं कहा कि const स्थिर लिंक के लिए डिफ़ॉल्ट चर? हाँ, मैंने किया। लेकिन kActivePlaygroundconst नहीं है। यह एक गैर-const पॉइंटर const char है।

यह आपकी अपेक्षा के अनुरूप काम करेगा:

const char * const kActivePlayground = "kiddiePool"; 
+0

वास्तव में, धन्यवाद। विश्वास नहीं कर सकता मैं इसे याद किया। – johnbakers

+0

धन्यवाद, बेन। मुझे यह भी याद आया और यह देखने के लिए मेरे सिर को तोड़ रहा था कि यह कैसे आंतरिक संबंध के रूप में योग्य नहीं था (3.5 से अधिक बार बारिश करना खुद को wtf कहते हैं)। अच्छा उत्तर। – WhozCraig

+2

यही कारण है कि मैं तर्क दूंगा (अंग्रेजी बोलने वालों के खिलाफ) कि 'कॉन्स' हमेशा योग्यता के * दाएं * पर होना चाहिए, 'कॉन्स्ट चार *' आपको संदेह कर सकता है लेकिन 'char const * 'नहीं होगा। –

0

आप एक निरंतर चार सरणी का उपयोग कर सकते

const char kActivePlayground[] = "kiddiePool"; 

और kActivePlayground भी कार्य के लिए इस्तेमाल किया जा सकता है क्योंकि यह एक संदर्भ

const char* playground_text = kActivePlayground; 
है
संबंधित मुद्दे

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