2012-02-02 15 views
32

के लिए अनिर्धारित संदर्भ मैं एक क्रॉस कंपाइलर का उपयोग कर रहा हूं। मेरे कोड है:एक स्थिर सदस्य

class WindowsTimer{ 
public: 
    WindowsTimer(){ 
    _frequency.QuadPart = 0ull; 
    } 
private: 
    static LARGE_INTEGER _frequency; 
}; 

मैं निम्न त्रुटि:

undefined reference to `WindowsTimer::_frequency'

मैं भी

LARGE_INTEGER _frequency.QuadPart = 0ull; 

या

static LARGE_INTEGER _frequency.QuadPart = 0ull; 

लेकिन मैं कर रहा हूँ करने के लिए इसे बदलने की कोशिश की अभी भी त्रुटियां हो रही हैं।

कोई भी जानता है क्यों?

+0

[संभावित सदस्य, लिंकर त्रुटि के लिए अनिर्धारित संदर्भ] के संभावित डुप्लिकेट (http://stackoverflow.com/questions/9074073/undefined-reference-to-baseobject-linker-error-cw-freeglut) – iammilind

+0

कहां (यदि कहीं भी हो) क्या आपने _defined_ 'WindowsTimer :: _ आवृत्ति' है? –

+0

@ चार्ल्सबैली यह कक्षा में मेरा एकमात्र सदस्य है। – kakush

उत्तर

54

आपको .cpp फ़ाइल में _frequency परिभाषित करने की आवश्यकता है।

अर्थात

LARGE_INTEGER WindowsTimer::_frequency; 
15

लिंकर जहां _frequency के लिए डेटा आवंटित करने के लिए पता नहीं है और आप इसे मैन्युअल बताने के लिए की है। आप इसे आसानी से जोड़कर प्राप्त कर सकते हैं: LARGE_INTEGER WindowsTimer::_frequency = 0; आपके सी ++ स्रोतों में से एक में।

अधिक विस्तृत विवरण here

13

यदि वहाँ एक स्थिर चर वर्ग के अंदर घोषित तो आप इस

LARGE_INTEGER WindowsTimer::_frequency = 0; 
-1

तरह cpp फ़ाइल में परिभाषित करना चाहिए .cpp फ़ाइल में इस extern LARGE_INTEGER WindowsTimer::_frequency जोड़े ।

+1

यह 'बाहरी' की वजह से काम नहीं करेगा। मेरा कंपाइलर कहता है * त्रुटि: बाहरी लिंकेज * * के लिए सदस्य 'LARGE_INTEGER WindowsTimer :: _ आवृत्ति' स्पष्ट रूप से घोषित नहीं कर सकता है। और 'बाहरी' के बिना एक ही समाधान पहले से ही तीन अन्य उत्तरों में उल्लेख किया गया है। – HolyBlackCat

+0

यह मेरे लिए काम किया। –

+0

क्या LARGE_INTEGER है ?? –

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