यह एक हेडर फाइल में है, तो आप हर बार जब आप #include
यह xyz
तय कर रहे हैं।
आप घोषणा को @ आर सैमुअल क्लैचको शो के रूप में बदल सकते हैं। हमेशा की तरह (अगर डेटा नहीं है const
) इस तरह है:
Abc.h में:
extern char *xyz;
Abc.cpp में:
char *xyz = "xyz";
संपादित
जोड़ने के लिए
ध्यान दें कि हेडर गार्ड नहीं इस समस्या को हल करें:
#ifndef XYZ_H
#define XYZ_H
...
#endif
हैडर गार्ड "redefinition" त्रुटियों को रोकते हैं, जहां एक ही संकलन इकाई में एक ही प्रतीक दो बार प्रकट होता है। यह कंपाइलर त्रुटि है।
लेकिन फिर भी हेडर के साथ रक्षा करता है xyz
की परिभाषा अभी भी हर स्रोत फ़ाइल है कि यह शामिल है में दिखाई देगा, एक "डुप्लिकेट प्रतीक" त्रुटि है, जो एक लिंकर त्रुटि है के कारण।
मूल पोस्टर ने निश्चित रूप से इसका उल्लेख किया होगा तो यह अधिक उपयोगी होगा।
एक चर कई बार घोषणा कोई त्रुटि नहीं है (अगर यह एक ही अनुवाद इकाई के भीतर नहीं है)। इसे परिभाषित करना है। –
मुझे यह पकड़ा जाना चाहिए था, धन्यवाद। – egrunin
हेडर गार्ड स्पष्टीकरण के लिए धन्यवाद। यहां एक अजीब बात है, हालांकि - अगर मुझे उस शीर्षलेख में परिभाषित फ़ंक्शन है तो मुझे केवल डुप्लिकेट प्रतीकों के लिए लिंकर त्रुटि मिलती है। मेरे वर्तमान मामले में मेरे पास स्थिरांक का एक समूह है और शीर्षलेख में नामस्थान में परिभाषित कुछ फ़ंक्शन हैं - मुझे केवल फ़ंक्शंस के लिए लिंकर त्रुटि मिलती है, कॉन्स ठीक है। ऐसा क्यों है? –