चलो कहते हैं कि मैं एक द्विआधारी पेड़, BT
के लिए एक वर्ग बना रहा हूं, और मैं एक वर्ग है जो पेड़, BE
का एक तत्व का वर्णन करता है, जैसेटेम्पलेट क्लास मित्र के साथ क्लास टेम्पलेट, वास्तव में यहां क्या चल रहा है?
template<class T> class BE {
T *data;
BE *l, *r;
public:
...
template<class U> friend class BT;
};
template<class T> class BT {
BE<T> *root;
public:
...
private:
...
};
यह काम करने के लिए प्रकट होता है कुछ है; हालांकि मेरे पास क्या है इसके बारे में प्रश्न हैं।
मैं मूल रूप से
template<class T> friend class BT;
लेकिन यह आवश्यक प्रतीत होता है U
(या से T
अलावा कुछ) यहाँ, ऐसा क्यों है उपयोग करने के लिए दोस्त की घोषणा करने की कोशिश की? क्या इसका मतलब यह है कि किसी भी विशेष BT
किसी भी विशेष BE
कक्षा के लिए मित्र है?
टेम्पलेट्स और दोस्तों पर आईबीएम पेज में फ़ंक्शंस के लिए विभिन्न प्रकार के मित्र संबंधों के उदाहरण हैं, लेकिन वर्ग नहीं (और वाक्यविन्यास का अनुमान अभी तक समाधान पर अभिसरण नहीं हुआ है)। मैं यह समझना पसंद करूंगा कि कैसे मित्र संबंधों के प्रकार के लिए विनिर्देशों को सही तरीके से प्राप्त करना है, जिन्हें मैं परिभाषित करना चाहता हूं।
में मेरी कोड दोस्त वर्ग बीटी इस निर्माण के लिए दोस्त लाइन त्रुटि एक त्रुटि फेंकता : 'बीटी' एक टेम्पलेट नहीं है, भले ही इसे बाद में टेम्पलेट कक्षा बीटी { ... } –
तो रहस्य यह है कि मुझे मित्र वर्ग बीटी का उपयोग करने के लिए बीटी घोषित करने की आवश्यकता है; बीई में लाइन, लेकिन टेम्पलेट दोस्त वर्ग बीटी के लिए नहीं; सहायता के लिए धन्यवाद! –
अधिक विशिष्ट होने के लिए: आपको 'टेम्पलेट कक्षा बीटी; '_before_ बीई की परिभाषा घोषित करना होगा, और उसके बाद' मित्र वर्ग बीटी ;' _inside_ कक्षा बीई का उपयोग करें। –