मैं एक कक्षा के लिए एक सी ++ - आधारित असाइनमेंट डाल रहा हूं जिसे मैं पढ़ रहा हूं। मेरे पास एक ऐसा कार्य है जिसे मैं छात्रों को निर्यात कर रहा हूं कि मैं उन्हें अपने कार्यक्रम में विभिन्न बिंदुओं पर कॉल करना चाहता हूं ताकि ग्रेडिंग के दौरान, हम यह सुनिश्चित करने के लिए उन कॉलों को रोक सकते हैं कि वे सही समय पर सही चीजें कर रहे हैं । मैं नहीं चाहता कि कोड प्रदान की गई स्टार्टर फाइलों में कुछ भी करे, इसलिए मैंने फ़ंक्शन को एक ऐसा शरीर दिया है जिसमें केवल बयान की एक श्रृंखला है जो सभी तर्कों को void
पर अप्रयुक्त तर्कों के बारे में संकलक चेतावनियों को दबाने के लिए रखती है। ऐसा करने के दौरान, मैं एक असामान्य कंपाइलर त्रुटि में भाग गया जो मैंने पहले कभी नहीं देखा है, और इस साइट पर एक खोज ने कुछ भी उपयोगी नहीं किया है।शून्य करने के लिए असामान्य संकलक त्रुटि कास्टिंग?
त्रुटि सबसे अच्छा this reduced test case द्वारा उदाहरण जा सकता है:
void iDontUseMyArguments(int a, int b) {
(void) a; // Explicit cast to void - totally fine!
(void) b;
}
void iDontEither(int a, int b) {
(void) a, b; // Comma expression casted to void, though technically
// b isn't casted to void!
}
void norDoI(int a, int b) {
void(a, b); // ERROR! No idea why this isn't okay.
}
void meNeither(int a, int b) {
(void)(a, b); // Comma expression casted to void - totally fine!
}
void jumpOnBandwagon(int a, int b) {
void((a, b)); // Comma expression casted to void - totally fine!
}
आप देख सकते हैं, इनमें से अधिकांश ठीक संकलन। मुद्दा यह एक में किया गया था:
void(a, b);
यह निम्न त्रुटि से चलाता है:
prog.cpp: In function 'void norDoI(int, int)':
prog.cpp:11:11: error: expression list treated as compound expression in functional cast [-fpermissive]
void(a, b);
^
मैं यह त्रुटि संदेश का सामना करना पड़ा कभी नहीं किया है, तो मुझे यकीन है कि क्या यह मुझे बताने की कोशिश कर रहा है नहीं कर रहा हूँ।
लाइन
void(a, b);
के पीछे मंशा a
और b
है कि तब casted था शामिल एक समारोह शैली डाली का उपयोग कर void
टाइप करने के लिए एक अल्पविराम अभिव्यक्ति होना था। आप देख सकते हैं, के बाद सभी काम वेरिएंट:
(void)(a, b);
void((a, b));
मुझे लगता है इस संभावना सबसे अप्रिय पार्स के साथ कुछ है और यह एक घोषणा के रूप में व्याख्या हो रही है, लेकिन विशेष रूप से त्रुटि मैं हो रही है नहीं है ऐसा लगता है।
- क्यों, वास्तव में, नहीं इस कोड को कानूनी है:
मेरा प्रश्न पीछा कर रहा है?
- संकलक क्या सोचता है कि मैं करने की कोशिश कर रहा हूं?
- क्यों, वास्तव में, ये अन्य रूप कानूनी हैं?
मैं कहूंगा, आपको पढ़ना शुरू करने से पहले बहुत कुछ सीखना होगा! – SergeyA
@ सर्गेई कहने का क्या मतलब है। कौन कहता है कि वे सी ++ सिखाते हैं। – NathanOliver
@NathanOliver, मुझे यकीन है कि ओपी सी ++ सिखाता है। अगर मैं गलत हूं, तो मैं क्षमा चाहता हूं। यदि मैं सही हूं, तो यह हमारे स्कूलों में प्रोग्रामिंग शिक्षा के साथ सभी समस्याओं का संकेत देगा। – SergeyA