2009-04-13 20 views
22

डुप्लिकेट:
C++: undefined reference to static class memberसी ++ में स्थिर वर्ग चर का उपयोग?

यदि मैं यह

// header file 
class Foo 
{ 
    public: 
    static int bar; 
    int baz; 
    int adder(); 
}; 

// implementation 
int Foo::adder() 
{ 
    return baz + bar; 
} 

की तरह एक वर्ग/struct है यह काम नहीं करता। मुझे "फू :: बार" त्रुटि के लिए एक अनिर्धारित संदर्भ मिलता है। मैं सी ++ में स्थिर वर्ग चर का उपयोग कैसे करूं?

+1

ध्यान दें कि आप ';' गायब हैं कक्षा परिभाषा के बाद। – dirkgently

उत्तर

53

आप कार्यान्वयन फ़ाइल में निम्न पंक्ति जोड़ना होगा:

int Foo::bar = you_initial_value_here; 

यह बहुत संकलक स्थिर चर के लिए एक जगह है की आवश्यकता है।

16

यह सही वाक्यविन्यास है, हालांकि, Foo::bar को हेडर के बाहर अलग से परिभाषित किया जाना चाहिए। अपने .cpp फ़ाइलों में से एक में, यह कहते हैं:

int Foo::bar; 

है कि आप एक भंडारण निर्धारित करना होगा:

int Foo::bar = 0; // or whatever value you want 
+0

हैलो क्रिस, क्या हमारे पास कुछ गलत है यदि हमारे पास C++ (गैर बहु ​​थ्रेडेड स्रोत कोड) में इतने सारे सार्वजनिक स्थैतिक वर्ग सदस्य चर हैं। मैंने अपने कुछ वैश्विक चर को कक्षा में सार्वजनिक स्थिर के रूप में स्थानांतरित कर दिया है। – sree

15

आप एक पंक्ति जोड़ें की जरूरत है। कक्षा में स्थैतिक की परिभाषा "बाहरी" के समान है - यह प्रतीक प्रदान करती है लेकिन इसे नहीं बनाती है। यानी

foo.h

class Foo { 
    static int bar; 
    int adder(); 
}; 

foo.cpp

int Foo::bar=0; 
int Foo::adder() { ... } 
1

कक्षा में स्थिर चर के उपयोग के लिए, में पहले आप एक मूल्य के आम तौर पर (कोई localy) अपने स्थिर चर करने के लिए (देना चाहिए आरंभ करें) तो आप कक्षा में एक स्थिर सदस्य तक पहुंच सकते हैं:

class Foo 
{ 
    public: 
    static int bar; 
    int baz; 
    int adder(); 
}; 

int Foo::bar = 0; 
// implementation 
int Foo::adder() 
{ 
    return baz + bar; 
} 
संबंधित मुद्दे