my_test.hक्या एक कॉन्स स्थिर चर को C++ हेडर फ़ाइल में प्रारंभ किया जाना चाहिए?
#ifndef MY_TEST
#define MY_TEST
struct obj {
int x;
int y;
};
class A {
private:
const static int a=100;
const static obj b;
};
const obj A::b={1,2};
#endif
जब सीपीपी संकलन इस हेडर फाइल का उपयोग कर, एक त्रुटि 'multiple definition of 'A::b'
होता है।
- यह तब क्यों है जब मैं गार्ड मैक्रो का उपयोग कर रहा हूं?
A::a
क्यों एरो उत्पन्न नहीं करता है? (मैं कोडconst static obj b={1,2}
class A
में नहीं लिख सकते हैं)
ओपी के लिए, शुरुआत के रूप में, "आपको आवश्यकता है" सही है। हालांकि, एक पूर्ण तकनीकी कथन के रूप में यह नहीं है, क्योंकि वर्ग टेम्पलेट्स के लिए एक ओडीआर छूट है। जिसका अर्थ यह है कि तकनीकी रूप से, यदि इसके लिए वास्तविक आवश्यकता है, तो कोई एक वर्ग टेम्पलेट में स्थिर स्थिरता को परिभाषित कर सकता है और फिर मनमाने ढंग से विशेषज्ञता प्राप्त कर सकता है। इसे कभी-कभी टेम्पलेटेड निरंतर चाल के रूप में जाना जाता है। एक कार्यान्वयन फ़ाइल से बचने के लिए एक और व्यावहारिक तरीका, यदि कोई करता है, तो इनलाइन फ़ंक्शन के माध्यम से निरंतर पहुंच प्रदान करना है (जो स्थानीय के रूप में स्थिर हो सकता है)। ' –
@ एएलएफ: मैं आपकी टिप्पणी के अनुसार सहमत हूं। वास्तव में यह जानकारी का एक अच्छा टुकड़ा है। –