I cannot compile using template in C++ -
मैंने निम्नलिखित तार को जी ++ के साथ संकलित किया है
#include & lt; iostream & gt; #include & lt; स्ट्रिंग & gt; नेमस्पेस एसटीडी का उपयोग करना; टेम्पलेट & lt; कक्षा T & gt; वर्ग नोड & लेफ्टिनेंट; const char * & gt; {निजी: स्ट्रिंग x_; नोड * अगला_; सार्वजनिक: नोड (कॉन्स्ट चार * कश्मीर, नोड * अगला): अगले_ (अगली), x_ (k) {} स्ट्रिंग डेटा () {वापसी x_;} नोड * get_next () {next_;}}; $ G ++ -c node01.cc node01.cc: त्रुटि: 'नोड' एक टेम्पलेट नहीं है
क्या गड़बड़ है? मैं सी + +
के लिए जा रहा हूँ आप घोषणाएं और तत्काल मिक्स कर रहे हैं जब आप एक टेम्प्लेट घोषित करते हैं, तो आप इसके नाम के तुरंत बाद एक प्रकार निर्दिष्ट नहीं करते हैं। इसके बजाय, इसे इस तरह घोषित करें:
टेम्पलेट & lt; class T & gt; क्लास नोड {निजी: कॉन्स्ट टी एक्स_; नोड * अगला_; सार्वजनिक: नोड (कॉन्स्ट टी एंड amp; कश्मीर, नोड * अगला): x_ (k), अगला_ (अगली) {} कॉन्स्ट टी एंड amp; डेटा () {वापसी x_;} नोड * get_next () {वापसी next_;}};
आपका मूल घोषणा भी स्ट्रिंग ,
const char *
को भ्रमित करती है, और सामान्य प्रकार जो T < / code>। इस तरह एक टेम्पलेट के लिए, आप शायद उपयोगकर्ता को सदस्य (
x_
) के प्रकार को परिभाषित करना चाहते हैं यदि आप इसे स्पष्ट रूप से const char *
या स्ट्रिंग
के रूप में घोषित करते हैं, तो आप उपयोगकर्ता को T
के लिए उपयोग कर सकते हैं, को सीमित करके सामान्यता खो रहे हैं।
ध्यान दें कि मैंने उदाहरण चर के प्रकार, कन्स्ट्रक्टर के पैरामीटर और डेटा ()
की वापसी प्रकार T
के संदर्भ में परिवर्तित किया है, भी।
जब आप वास्तव में टेम्पलेट प्रकार के एक चर instantiate, आप एक ठोस प्रकार पैरामीटर प्रदान कर सकते हैं, उदाहरण :
int main Int argc, const char ** argv) {नोड & lt; char * & gt; * पूंछ = नया नोड & लेफ्टिनेंट; चार * & gt; ("पूंछ", नल); नोड के & lt; चार * & gt; * नोड = नया नोड & lt; char * & gt; ("नोड", पूंछ);
जब भी आप टेम्प्लेट का नाम नोड
टेम्पलेट घोषणापत्र के बाहर लिखते हैं, तब तक यह पूरा नहीं होता जब तक कि आप पैरामीटर के लिए कोई मान न दें टी
। यदि आप बस नोड
कहते हैं, तो संकलक को यह नहीं पता होगा कि आप किस नोड के तरह चाहते हैं।
उपरोक्त शब्दशः है, इसलिए आप शायद जब आप इसे वास्तव में प्रयोग करते हैं तो इसे टाइप कियाइफ़ के साथ भी आसान बनाते हैं:
टाइप-एफेड नोड & lt; char * & gt; StringNode; Int main (int argc, const char ** argv) {स्ट्रिंगनोड * पूंछ = नया स्ट्रिंगनोड ("पूंछ", नल); स्ट्रिंगनोड * नोड = नया स्ट्रिंगनोड ("नोड", पूंछ); // mynode और mytail के लिए सामान}
अब आपने दो नोड्स की लिंक सूची बनाई है आप सूची में सभी मानों को इस तरह से प्रिंट कर सकते हैं:
के लिए (स्ट्रिंगनोड * n = नोड; n; n = n- & gt; get_next ()) {cout & lt; & lt ; N- & gt; डेटा () & lt; & lt; endl; }
यदि सब ठीक हो जाता है, तो यह प्रिंट होगा:
नोड पूंछ
Comments
Post a Comment