C++ - Confusion over particular example of class instantiation from Professor -
मेरे प्रोफेसर ने निम्नलिखित कोड दिया था:
Main.cpp #include "state.h" #include & lt; स्ट्रिंग & gt; # शामिल करें & lt; iostream & gt; नेमस्पेस एसटीडी का उपयोग करना; Int main (int argc, char const * argv []) {const int success = 0; स्ट्रिंग का नाम; राज्य एक्स; राज्य y = "s2"; // यह राज्य z = y को संकलित नहीं करता है; राज्य * पी = नया राज्य (z); X = * p; p- & gt; set_name ( "S3"); हटाएं पी; x.get_name (नाम); Std :: cout & lt; & lt; "राज्य का नाम x है" & lt; & lt; नाम & lt; & lt; std :: endl; Std :: cout & lt; & lt; "राज्यों की कुल संख्या है" & lt; & lt; राज्य :: कुल_संख्या_ओफ़_स्टेट () & lt; & lt; std :: endl; वापसी की सफलता; } राज्य.h #ifndef STATE_H #define STATE_H #include & lt; स्ट्रिंग & gt; नेमस्पेस एसटीडी का उपयोग करना; वर्ग राज्य {निजी: स्ट्रिंग * नाम; // स्ट्र सूचक सूचक प्रयोजनों के लिए प्रयोग किया जाता है स्थिर इंट नंबर_फ_स्टेट; सार्वजनिक: राज्य (); राज्य (स्ट्रिंग स्टेट_नाम); राज्य (कॉन्स्ट राज्य और राज्य); // मूल रूप से प्रतिलिपि कन्स्ट्रक्टर वर्चुअल ~ स्टेट (); राज्य में & amp; ऑपरेटर = (कॉन्स्ट स्टेट एंड राज्य); // बराबर शून्य get_name (स्ट्रिंग और राज्य_नाम) कॉन्स्ट पर कॉपी; शून्य सेट_नाम (स्ट्रिंग स्टेट_नाम); स्थिर इंटेल कुल_एनम्बर_ओफ़_स्टेट्स (); }; Typedef राज्य * State_pointer; #endif Ubuntu पर जी ++ 4.8 में, मुझे निम्न त्रुटि मिलती है: $ g ++ example_main_1.cpp state.cpp Example_main_1.cpp: फ़ंक्शन "int main" (int, const char **) एक उदाहरण: example_main_1.cpp: 14: 12: त्रुटि: कॉन्स्ट चार्ल्स [3] से रूपांतरण ???? गैर-स्केलर प्रकार के लिए राज्य y = "s2" का अनुरोध किया; // यह संकलित नहीं करता मैंने उनसे कक्षा में इस बारे में पूछा, उन्होंने कहा कि यह मान्य C ++ है और यह काम करना चाहिए। मैंने कभी इस प्रकार की तात्कालिकता को कभी नहीं देखा है, जहां उसे स्ट्रिंग शब्दशः से std :: string में कनवर्ट करना होगा और फिर उसे एक state ऑब्जेक्ट में परिवर्तित करना होगा। तब मेरे प्रोफेसर ने बताया कि अन्य समकक्ष चालान बहुत करीब हैं:
राज्य y = "s2"; // राज्य y संकलित नहीं करता है ("s2"); // संकलित करता है राज्य y = स्ट्रिंग ("s2"); // क्या संकलित करता है यहाँ क्या हो रहा है? पहले क्यों संकलित नहीं करता है, लेकिन दूसरा और तीसरा क्या करता है? साथ ही, क्या मेरा प्रोफेसर गलत कह रहा है कि पहला वक्तव्य काम करना चाहिए? या क्या ऐसा व्यवहार है जो कम्पाइलर विशिष्ट है?
ऐसा लगता है कि आपका राज्य ऑब्जेक्ट एक कन्स्ट्रक्टर है जिसके पास स्ट्रिंग है। शाब्दिक "s2" प्रकार const char [3] है। यही कारण है कि आप त्रुटि प्राप्त कर रहे हैं। यह भी संकलक विशिष्ट है निम्नलिखित कोड स्निपेट में कार्य करता है, अभी तक नहीं:
struct राज्य {राज्य (स्ट्रिंग्स) {}}; Int main () {राज्य s = "a"; }
#include "state.h" #include & lt; स्ट्रिंग & gt; # शामिल करें & lt; iostream & gt; नेमस्पेस एसटीडी का उपयोग करना; Int main (int argc, char const * argv []) {const int success = 0; स्ट्रिंग का नाम; राज्य एक्स; राज्य y = "s2"; // यह राज्य z = y को संकलित नहीं करता है; राज्य * पी = नया राज्य (z); X = * p; p- & gt; set_name ( "S3"); हटाएं पी; x.get_name (नाम); Std :: cout & lt; & lt; "राज्य का नाम x है" & lt; & lt; नाम & lt; & lt; std :: endl; Std :: cout & lt; & lt; "राज्यों की कुल संख्या है" & lt; & lt; राज्य :: कुल_संख्या_ओफ़_स्टेट () & lt; & lt; std :: endl; वापसी की सफलता; } राज्य.h #ifndef STATE_H #define STATE_H #include & lt; स्ट्रिंग & gt; नेमस्पेस एसटीडी का उपयोग करना; वर्ग राज्य {निजी: स्ट्रिंग * नाम; // स्ट्र सूचक सूचक प्रयोजनों के लिए प्रयोग किया जाता है स्थिर इंट नंबर_फ_स्टेट; सार्वजनिक: राज्य (); राज्य (स्ट्रिंग स्टेट_नाम); राज्य (कॉन्स्ट राज्य और राज्य); // मूल रूप से प्रतिलिपि कन्स्ट्रक्टर वर्चुअल ~ स्टेट (); राज्य में & amp; ऑपरेटर = (कॉन्स्ट स्टेट एंड राज्य); // बराबर शून्य get_name (स्ट्रिंग और राज्य_नाम) कॉन्स्ट पर कॉपी; शून्य सेट_नाम (स्ट्रिंग स्टेट_नाम); स्थिर इंटेल कुल_एनम्बर_ओफ़_स्टेट्स (); }; Typedef राज्य * State_pointer; #endif Ubuntu पर जी ++ 4.8 में, मुझे निम्न त्रुटि मिलती है: $ g ++ example_main_1.cpp state.cpp Example_main_1.cpp: फ़ंक्शन "int main" (int, const char **) एक उदाहरण: example_main_1.cpp: 14: 12: त्रुटि: कॉन्स्ट चार्ल्स [3] से रूपांतरण ???? गैर-स्केलर प्रकार के लिए राज्य y = "s2" का अनुरोध किया; // यह संकलित नहीं करता मैंने उनसे कक्षा में इस बारे में पूछा, उन्होंने कहा कि यह मान्य C ++ है और यह काम करना चाहिए। मैंने कभी इस प्रकार की तात्कालिकता को कभी नहीं देखा है, जहां उसे स्ट्रिंग शब्दशः से std :: string में कनवर्ट करना होगा और फिर उसे एक state ऑब्जेक्ट में परिवर्तित करना होगा। तब मेरे प्रोफेसर ने बताया कि अन्य समकक्ष चालान बहुत करीब हैं:
राज्य y = "s2"; // राज्य y संकलित नहीं करता है ("s2"); // संकलित करता है राज्य y = स्ट्रिंग ("s2"); // क्या संकलित करता है यहाँ क्या हो रहा है? पहले क्यों संकलित नहीं करता है, लेकिन दूसरा और तीसरा क्या करता है? साथ ही, क्या मेरा प्रोफेसर गलत कह रहा है कि पहला वक्तव्य काम करना चाहिए? या क्या ऐसा व्यवहार है जो कम्पाइलर विशिष्ट है?
ऐसा लगता है कि आपका राज्य ऑब्जेक्ट एक कन्स्ट्रक्टर है जिसके पास स्ट्रिंग है। शाब्दिक "s2" प्रकार const char [3] है। यही कारण है कि आप त्रुटि प्राप्त कर रहे हैं। यह भी संकलक विशिष्ट है निम्नलिखित कोड स्निपेट में कार्य करता है, अभी तक नहीं:
struct राज्य {राज्य (स्ट्रिंग्स) {}}; Int main () {राज्य s = "a"; }
Comments
Post a Comment