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


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.