2010-07-06 10 views
7

मैं एक गेम बना रहा हूं और मेरे पास Man नामक एक कक्षा है और Block नामक एक वर्ग को उनके कोड में एक दूसरे की आवश्यकता है, लेकिन वे अलग-अलग फाइलों में हैं। क्या कक्षा को "पूर्वनिर्धारित" करने का कोई तरीका है? उद्देश्य-सी के @class मैक्रो की तरह?सी ++: दो कक्षाओं को एक-दूसरे की आवश्यकता है

+2

लगता है कि आप जो चाहते हैं वह एक आगे की घोषणा है। BlockDude के लिए – mooware

+0

+1। –

उत्तर

5

इसे एक परिपत्र निर्भरता कहा जाता है। कक्षा में Two.h

class One; 

class Two { 
    public: 
    One* oneRef; 
}; 

और कक्षा में One.h

class Two; 

class One { 
    public: 
    Two* twoRef; 
}; 

"वर्ग एक," और "कक्षा दो;" निर्देश क्रमशः एक वर्ग नाम "वन" और "दो" आवंटित करते हैं; लेकिन वे नाम से परे किसी अन्य विवरण को परिभाषित नहीं करते हैं। इसलिए आप संकेत वर्ग बना सकते हैं, लेकिन आप शामिल नहीं कर सकते तो जैसे पूरी कक्षा:

class One; 

class Two : public One { 
}; 

class Three { 
    public: 
    One one; 
}; 

कारण ऊपर दो उदाहरण संकलन नहीं होगा क्योंकि जबकि संकलक जानता है कि वहाँ एक वर्ग से एक है, यह 'नहीं करता है टी फ़ील्ड, विधियों या आभासी तरीकों के बारे में नहीं जानते, कक्षा वन में हो सकता है क्योंकि केवल नाम परिभाषित किया गया था, वास्तविक वर्ग परिभाषा नहीं।

11

हां।

class Man; 

यह Man एक "अपूर्ण प्रकार" के रूप में घोषित करेंगे। आप इसके लिए पॉइंटर्स या संदर्भ और कुछ अन्य चीजें घोषित कर सकते हैं, लेकिन आप इसका उदाहरण नहीं बना सकते हैं या इसके सदस्यों तक पहुंच नहीं सकते हैं। यह एक पूर्ण वर्णन नहीं है कि आप क्या कर सकते हैं और अधूरे प्रकार से नहीं कर सकते हैं, लेकिन यह सामान्य विचार है।

+1

ध्यान देने योग्य महत्वपूर्ण है, आप पूर्ण प्रकार बाद में जारी रख सकते हैं और पहुंच प्राप्त कर सकते हैं। आप हेडर में अधूरे प्रकारों का उपयोग कर सकते हैं और इसके उपयोग के लिए सीपीपी में पूर्ण शीर्षलेख परिभाषा शामिल कर सकते हैं। –

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