इस सवाल का पहले से ही एक उत्तर है: < / P>
- 7 जवाब
मैं बनाने की कोशिश कर रहा हूँ एक वस्तु जो किसी भी प्रकार का हो सकती है यहां कोड है:
#include & lt; stdio.h & gt; कक्षा वस्तु {सार्वजनिक: शून्य * पी; चार प्रकार; बात (const char * x) {p = (char *) x; प्रकार = 0; } बात (int x) {p = (int *) x; प्रकार = 1; } बात (बूल x) {p = (bool *) x; प्रकार = 2; } / * वस्तु (फ्लोट एक्स) {p = (फ्लोट *) एक्स; type = 3; } * / शून्य प्रिंट () {स्विच (प्रकार) {मामला 0: प्रिंटफ़ ("% s \ n", p); टूटना; मामले 1: प्रिंटफ़ ("% i \ n", p); टूटना; मामले 2: यदि (पी & gt; 0) प्रिंटफ़ ("सच \ n"); अन्य प्रिंटफ़ ("गलत \ n"); टूटना; मामले 3: प्रिंटफ़ ("% एफ \ n", पी); टूटना; डिफ़ॉल्ट: ब्रेक; }}}; Int main () {बात t0 ("हैलो!"); बात टी 1 (123); बात टी 2 (गलत); t0.print (); t1.print (); t2.print (); वापसी 0; }
कोड काम कर रहा है और जब मैं प्रोग्राम चलाता हूँ, तो यह प्रदर्शित करता है:
हैलो! 123 झूठे
लेकिन अगर मैं फ्लोट कन्स्ट्रक्टर को दोहराता हूं, तो कंपाइलर निम्नलिखित त्रुटि लिखता है:
main.cpp: कन्स्ट्रक्टर में 'चीज़ :: चीट ( फ्लोट) ': main.cpp: 30:13: त्रुटि: प्रकार' फ्लोट 'से अवैध कास्ट' फ्लोट * 'टाइप करने के लिए
यह फ़्लोट प्रकार के लिए क्यों काम नहीं कर रहा है? मैं उपयोग करता हूं: Windows XP SP3, मिनजीड जीसीसी 4.7.2।
आपको यादृच्छिक प्रकार से कास्टिंग नहीं करना चाहिए सूचक प्रकारों के लिए भले ही कास्टिंग
चार कॉन्स्ट * ,
int , और
bool आपके लिए काम करने लगते हैं, वे किसी भी अधिक फ्लोट को कोस्ट करने से नहीं चाहते हैं एक सूचक वास्तव में आपको कोई चेतावनी संकेत के रूप में सी ++ में किसी भी कलाकार को देखना चाहिए कि आप कुछ गलत कर रहे हैं।
इसके बजाय आपको कुछ ऐसा करना चाहिए।
class thing { निजी: संघ {char const * cs; Int i; बुल बी; फ्लोट एफ; }; Enum वर्ग प्रकार {cs, i, b, f} संग्रहित प्रकार; सार्वजनिक: बात (const char * x): cs (x), संग्रहीत_प्रकार (प्रकार :: सीएस) {} बात (int x): i (x), संग्रहीत_प्रकार (प्रकार :: i) {} बात (bool x): B (x), संग्रहीत_प्रकार (प्रकार :: बी) {} बात (फ्लोट एक्स): एफ (एक्स), संचयित_प्रकार (प्रकार :: एफ) {} शून्य प्रिंट () {स्विच (संग्रहीत_प्रकार) {case type :: cs: Std :: printf ("% s \ n", सीएस); टूटना; मामले का प्रकार :: I: std :: printf ("% i \ n", i); टूटना; मामले का प्रकार :: बी: std :: printf ("% s \ n", b? "True": "false"); टूटना; मामले का प्रकार :: F: std :: printf ("% f \ n", f); टूटना; }}};
या बेहतर अभी तक आप एक पुस्तकालय का उपयोग कर सकते हैं जो पहले से आपके लिए ऐसा करती है, जैसे कि बढ़ावा :: संस्करण, या बढ़ावा :: कोई भी।
No comments:
Post a Comment