2010-09-07 16 views
5

मैं निम्नलिखित सेटअप (उम्मीद यह भी एक उदाहरण नंगा नहीं है) है:अपरिभाषित संदर्भ जब निर्वासन का उपयोग कर

आह

typedef std::map<unsigned int, float> MyClass; 
extern MyClass inst; 

A.cpp

MyClass inst; 

Bh

#include <A.h> 
void foo(); 

B.cpp

#include <B.h> 
void foo { 
    inst.myClassFunc(); 
} 

अब, जब मैं B.cpp में Inst का उपयोग मैं undefined reference to inst मिलता है।

इसे ठीक करने के तरीके पर कोई विचार?

+0

क्या आप #.c Myppass' की परिभाषा B.cpp में शामिल करते हैं? –

+0

आपको अपनी पोस्ट में पूर्ण कंपाइलर त्रुटि संदेश शामिल करना चाहिए। –

उत्तर

0

यह क्या हो रहा है यह जानने के लिए यह एक उदाहरण है। हालांकि, उपरोक्त के आधार पर यह पूरी तरह से संभव है कि जब यह असफल लाइन को हिट करता है तो संकलक को MyClass में वास्तव में क्या पता नहीं है और इसलिए MyClassFunc हल नहीं कर सकता है।

हमें माइक्लास की परिभाषा को देखना होगा और यह जानना होगा कि यह सुनिश्चित करने के लिए कहां है।

+0

'MyClass' –

0

आप के रूप

g++ -c A.cpp 
g++ -c B.cpp 

ऊपर उल्लेख किया फ़ाइल A.cpp संकलित करने के लिए और इस प्रकार तो निष्पादन योग्य बनाने के दौरान आप कमांड लिखना चाहिए है:

g++ A.o B.o 
+1

या एक चरण में,' g ++ A.cpp B.cpp' के बारे में अपडेट किया गया। –

0

बुनियादी उदाहरण कोड से आप पोस्ट किया गया मैं कहूंगा कि आप अपनी B.cpp फ़ाइल में #include <B.h> भूल गए हैं।

9

मुझे पता है कि यह प्रश्न पुराना है, लेकिन यह अभी भी किसी के लिए सहायक हो सकता है।

वैश्विक चर (यहाँ: MyClass inst) संकलन इकाई के लिएexternजो यह (यहाँ: A.cpp) को परिभाषित नहीं होना चाहिए

एक तरह से इस लक्ष्य को हासिल करने के लिए:

  • घोषितमें आपका वैश्विक चर अलग-अलग शीर्षलेख (मान लें global.h) और इस हेडर को * cpp में शामिल करें से।
  • संकलन इकाई के लिए extern कीवर्ड जो उन्हें (जैसे #ifdef साथ) को परिभाषित निकालें:

global.h लगता है:

#ifdef A_H_ 
    #define EXTERN 
#else 
    #define EXTERN extern 
#endif 

EXTERN MyClass inst; 

जबकि एज लगता है:

#ifndef A_H_ 
#define A_H_ 

// your header content (without globals) 

#endif /* A_H_ */ 

और A.cpp:

#include "A.h" 
#include "global.h" // after A.h inclusion, we need A_H_ definition 

आशा है कि यह मदद करता है!

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