2010-10-24 15 views
6

मुझे कक्षा में एक स्थिर संपत्ति तक पहुंचने में समस्याएं आ रही हैं।सी ++ स्टेटिक प्रॉपर्टी

shape.obj : error LNK2001: unresolved external symbol "public: static class TCollection<class Shape *> Shape::shapes"

वर्ग की परिभाषा है::

class Shape { 

public: 
    static Collection<Shape*> shapes; 

    static void get_all_instances(Collection<Shape*> &list); 
}; 

और स्थिर विधि से किया जा रहा के कार्यान्वयन:

void Shape::get_all_instances(Collection<Shape*> &list) { 
    list = Shape::shapes; 
} 

यह की तरह लगता है मैं निम्न त्रुटि हो रही है shapes संपत्ति शुरू नहीं की जा रही है।

+0

वाह त्वरित प्रतिक्रिया के लिए धन्यवाद। शोध करने के लिए घंटों लगे और स्टैक ओवरफ्लो पर लगभग 1 मिनट लग गए। – Louis

+0

मुझे लगता है कि आपको एक स्थैतिक चर के साथ-साथ सार्वजनिक चर होने पर बहुत खेद होगा। क्या आपको वाकई इसकी ज़रूरत है? आप बस एक कॉन्स संग्रह क्यों पास नहीं करते हैं और ऑब्जेक्ट जहां भी आपको सभी आकारों की सूची चाहिए? इससे अन्य डेवलपर्स को आकार :: get_all_instances() को कॉल करने के लिए प्रोत्साहित किया जाएगा, जब भी उन्हें स्पष्ट रूप से पास करने की बजाय सूची की आवश्यकता हो। यह सभी प्रकार की समस्याओं का कारण बन जाएगा, जब आप परीक्षण करना चाहते हैं या आप आकृतियों के उपन्यासों पर काम करना चाहते हैं। –

+0

हाँ यह इस समय सार्वजनिक रूप से उग्र डीबगिंग के कारण सार्वजनिक है। – Louis

उत्तर

10

को परिभाषा जोड़े तुम सही के बाद से स्थिर चर केवल वर्ग के भीतर घोषित कर रहे हैं और परिभाषित नहीं।

आप उन्हें परिभाषित करना होगा, बस उस फ़ाइल में निम्न पंक्ति जोड़ें जहां आपका कार्यान्वयन है।

Collection<Shape*> Shape::shapes; 

और यह चाल चलनी चाहिए।

7

हां। आपको

Collection<Shape*> Shape::shapes; 

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

3

घोषणा कक्षा में है।

परिभाषा ठीक एक cpp फ़ाइल में रखा जाना चाहिए:

Collection<Shape*> Shape::shapes; 
5

आप shapes घोषणा की है, लेकिन यह निर्धारित नहीं किया है।

कार्यान्वयन फ़ाइल

Collection<Shape*> Shape::shapes; //definition 
4

कोड के लिए के रूप में है आप

Collection<Shape*> Shape::shapes(whatever constructor args); 

shapes की परिभाषा, की तरह प्रदान करने के लिए (एक कार्यान्वयन फ़ाइल में) की जरूरत है लेकिन बजाय आप एक सदस्य समारोह है कि एक स्थानीय के लिए एक संदर्भ रिटर्न विचार करना चाह सकते स्थिर Collection<Shape*>

चीयर्स & एचएचटी।

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