एक स्थिर सदस्य का अपरिभाषित संदर्भ


93

मैं एक क्रॉस कंपाइलर का उपयोग कर रहा हूं। मेरा कोड है:

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

मुझे निम्नलिखित त्रुटि मिलती है:

`WindowsTimer :: _ आवृत्ति 'के लिए अपरिभाषित संदर्भ

मैंने इसे बदलने की भी कोशिश की

LARGE_INTEGER _frequency.QuadPart = 0ull;

या

static LARGE_INTEGER _frequency.QuadPart = 0ull;

लेकिन मुझे अभी भी त्रुटियाँ मिल रही हैं।

किसी को भी पता है क्यों?



आपने कहां (अगर कहीं भी) परिभाषित किया है WindowsTimer::_frequency ?
सीबी बेली

@CharlesBailey यह कक्षा में मेरा एकमात्र सदस्य है।
kakush

जवाबों:


109

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

अर्थात

LARGE_INTEGER WindowsTimer::_frequency;

मुझे ऐसा क्यों करना चाहिए?
21

37

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

अधिक विस्तृत विवरण यहाँ


32

C ++ 17 के साथ, आप अपने वैरिएबल इनलाइन को घोषित कर सकते हैं , इसे cpp फाइल में परिभाषित करने की आवश्यकता नहीं है।

inline static LARGE_INTEGER _frequency;

यह मुझे एक त्रुटि देता हैerror: 'foobar' declared as an 'inline' field
पेड्रो हेनरिक

3
एनवीएम, मैंने अभी-अभी 6.3 से 8.2 तक MinGW मैनेजर के माध्यम से अपना GCC अपडेट किया है और यह ठीक काम करता है।
पेड्रो हेनरिक

24

अगर क्लास के अंदर एक स्टैटिक वैरिएबल घोषित किया गया है तो आपको इसे इस तरह से cpp फाइल में डिफाइन करना चाहिए

LARGE_INTEGER WindowsTimer::_frequency = 0;
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.