"के कई परिभाषा" के साथ इस मुद्दे को लिंक मैं निम्नलिखित "स्थिरांक" शीर्षक है।संकलन त्रुटि
ध्यान दें कि मैं X.h
या Y.h
में शामिल हूं।
फ़ाइलें X.c
और Y.c
ऑब्जेक्ट फ़ाइलों में संकलित हो जाएं जो libXY.a
नामक एक स्थिर लाइब्रेरी में संग्रहीत हैं।
जब मैं X.h
और Z.h
में Y.h
, शामिल हैं और जब मैं libXY.a
से लिंक, मैं त्रुटियों के बिना Z.c
संकलन नहीं कर सकते हैं:
/* Z.h */
#include "X.h"
#include "Y.h"
मैं निम्नलिखित संकलन त्रुटियों जब Z.c
संकलित करने के लिए कोशिश कर रहा है:
/path/to/libXY.a(X.o):(.data+0x0): multiple definition of `kFoo`
/path/to/libXY.a(Y.o):(.data+0x0): first defined here
/path/to/libXY.a(X.o):(.data+0x8): multiple definition of `kBar`
/path/to/libXY.a(Y.o):(.data+0x8): first defined here
मैंने kFoo
और kBar
से extern
पर सेट करने का प्रयास किया है, लेकिन वह मदद नहीं करता है।
मैं कई परिभाषाओं को कैसे हल करूं, जब मैं केवल एक बार स्थिरांक (हेडर गार्ड #ifndef CONSTANTS_H
के माध्यम से) समेत हूं?
शायद नहीं तत्काल मुद्दा (यकीन नहीं), लेकिन आप को निकाल देना चाहिए फर्जी '#pragma एक बार' और अपने शीर्षलेख में उचित बहु-समावेश गार्ड रखो। मानक प्रारूप '#ifndef MYHEADER_H #define MYHEADER_H है .... # endif' –