2011-05-31 11 views
6

मैंने कक्षा में कक्षा बी के कई उदाहरण दिए हैं, लेकिन इससे कक्षा में कोई त्रुटि नहीं होती है, यह नहीं जानता कि कक्षा बी क्या है।कक्षा प्रोटोटाइप

अब मुझे पता है मैं अपनी फ़ाइल ख एक सी लिख कर इस समस्या को हल कर सकते हैं, लेकिन यह गम्यता को खराब करता है और साथ ही मुझे गुस्सा दिलाती है। मुझे पता है कि मैं अपने कार्यों को प्रोटोटाइप कर सकता हूं इसलिए मुझे यह समस्या नहीं है लेकिन कक्षा में प्रोटोटाइप करने के तरीके पर कोई सामग्री नहीं मिल पाई है।

किसी को भी ग में वर्ग प्रोटोटाइप का एक उदाहरण है ++।

के रूप में वहाँ हो रहा है कुछ भ्रम की स्थिति मैं आपको दिखा मैं क्या चाहते

class A 
{ 
public: 

B foo[5]; 

}; 

class B 
{ 
public: 
int foo; 
char bar; 
} 

जाने लेकिन यह काम नहीं करता के रूप में एक बी तो मैं उन दोनों से पहले कुछ डाल करने की जरूरत नहीं देख सकते हैं, अगर यह एक समारोह था मैं ए() डाल दूंगा; फिर इसे बाद में लागू करें। मैं इसे कक्षा के साथ कैसे कर सकता हूं।

+0

के बीच किसी भी इंटरफ़ेस को घोषित और परिभाषित करने के लिए यह प्रश्न समझना बहुत मुश्किल है। * मेरी फाइल बी * सी * मतलब क्या लिख ​​रहा है? एक समारोह प्रोटोटाइप क्या मतलब है? –

+0

@Space_COwb मेरी फ़ाइल बी सी लिखने का मतलब क्लास बी लिखना है, इसके बाद कक्षा ए लिखना। यह काम करता है लेकिन इसे पढ़ने के लिए दुर्लभ बनाता है क्योंकि सूचना को न तो उस क्रम में प्रस्तुत किया जाता है और न ही इसे – Skeith

+0

में समझ में आता है, लेकिन शुरुआत में बी घोषणा क्यों नहीं लेती? – Nick

उत्तर

17

आप अपने सभी वर्गों घोषणा कर सकते हैं और फिर किसी भी क्रम में उन्हें परिभाषित इसलिए की तरह:

// Declare my classes 
class A; 
class B; 
class C; 

// Define my classes (any order will do) 
class A { ... }; 
class B { ... }; 
class C { ... }; 
+0

वे एक ही स्रोत फ़ाइल में हैं – Skeith

+0

मैंने फ़ाइल बी सी द्वारा सोचा था कि आपका मतलब 3 अलग-अलग फाइलें हैं। समाधान वही होगा, हालांकि 'कक्षा ए' की परिभाषा से पहले 'कक्षा बी' घोषित करें, फिर 'कक्षा बी' परिभाषित करें। वैकल्पिक रूप से, आप बाद में किसी भी क्रम में उन्हें परिभाषित करने से पहले सभी वर्गों की घोषणा कर सकते हैं। – Kanopus

+0

मेरे पास कक्षा बी से पहले कक्षा बी परिभाषित किया गया है, लेकिन मैं इसे दूसरी तरफ चाहता हूं, मैं पूछ रहा हूं कि मेरी कक्षाएं कैसे घोषित करें ताकि मैं उन्हें किसी भी क्रम में परिभाषित कर सकूं। – Skeith

1

class b;

 
class a { 
public: 
    b * inst1; 
}; 
class b{ 
.... 
}; 

यह आप जो चाहते हैं उसे है?

// Bar.h 

class Foo; // declares the class Foo without defining it 

class Bar { 
    Foo & foo; // can only be used for reference or pointer 
}; 

// Foo.h 

#include <Bar.h> 

class Foo { 
    Bar bar; // has full declaration, can create instance 
} 

आप किसी अन्य फाइल में एक पूर्ण घोषणा और परिभाषा प्रदान कर सकते हैं:

+0

हाँ बिल्कुल वही है जो मैं चाहता हूं लेकिन एक उदाहरण सूचक नहीं है, क्या यह संभव है? – Skeith

2

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

4

आप घोषणाओं के लिए देख रहे हैं।

class A; 
class B { 
    A MakeA(); 
    void ProcessA(A a); 
}; 
class A { 
    B bs[1000]; 
}; 

आप आगे एक वर्ग की घोषणा करते हैं, तो आप कर सकते हैं

declare functions taking and returning it or complex types made of it 
declare member variables of pointer or reference to it 

यह मूलतः इसका मतलब है कि किसी भी मामले जो एक के अंदर बी और इसके विपरीत के उदाहरण के साथ खत्म नहीं होता है, तो आप में सक्षम होना चाहिए ए और बी

+0

एक टीम की तरह सिर्फ एक ही तरह से कई लड़ाकू वर्ग हैं और एक लड़ाकू वर्ग में कई कदम वर्ग हैं, लेकिन मुझे लगता है कि आपने मेरी समस्या हल की है – Skeith

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