संकलित त्रुटि: स्विच, "पहले अपेक्षित अभिव्यक्ति"


79

पीछा करने के लिए कट मैंने अपनी समस्या को फिर से बनाया है क्योंकि यह काफी आत्म व्याख्यात्मक है।

यह त्रुटि के बिना अनुपालन करता है:

switch (n) {
    case 1:
        NSLog(@"");
        NSString *aStr;
        break;
    default:
        break;
    }

यह त्रुटि के साथ संकलित है और यह केवल NSLog () को याद कर रहा है:

switch (n) {
    case 1:
        NSString *aStr;
        break;
    default:
        break;
    }

यह "संकलन में एक त्रुटि फेंकता 'NSString' से पहले उम्मीद की अभिव्यक्ति "

क्या मुझसे कोई चूक हो रही है?



मुझे एक समान त्रुटि के साथ एक स्विच / केस स्टेटमेंट याद है, यह गायब हो जाता था जब मैं केस ब्लॉक के भीतर कहीं टिप्पणी करता हूं .. जादू
यूनुस नेदिम मेहेल

जवाबों:


164

सामान्य सी में आपको इसे दोनों मामलों में कोष्ठक में संलग्न करना होगा। मुझे संदेह है कि इससे आपकी समस्या ठीक हो सकती है:

case 1:
{
    NSLog(@"");
    NSString *aStr;
    break;
}

देख अधिक जानकारी के लिए यह SO प्रश्न

इस समस्या को हल करने का दूसरा तरीका केस लेबल और पहली घोषणा के बीच एक स्टेटमेंट डालना है जैसा आपने ऊपर अपने काम के उदाहरण में किया है। अधिक जानकारी के लिए टिप्पणियों और क्विन टेलर का जवाब देखें।


1
दिलचस्प है। ब्रैकेट दृष्टिकोण की कोशिश नहीं की।
ईमंतस

हाँ यह समस्या को ठीक करता है। मैं सिर्फ xcode के कोड फिल के साथ चल रहा था जो उनका उपयोग नहीं करता है। धन्यवाद।
रॉस

मैं इस समस्या से पहले आया हूं, मैंने इसे {} खुद का उपयोग करके हल किया है, यह देखने के लिए अच्छा है कि यह सही समाधान था। आप के लिए +1 दान।
डेविड वॉन्ग

20
जरूरी नहीं कि आप कोष्ठक का उपयोग करें। लेबल के काम के ;बाद एक खाली स्टेटमेंट ( ) caseडालना। त्रुटि का कारण और कारण दोनों समाधान काम करते हैं कि एक लेबल सहित एक caseलेबल केवल एक बयान से पहले हो सकता है। घोषणाएँ C (C99 ations6.7, .86.8, aren't6.8.2) और उद्देश्य-C में कथन नहीं हैं, इसलिए आप घोषणा से ठीक पहले एक लेबल नहीं लगा सकते। इस प्रकार समाधान: या तो लेबल और घोषणा के बीच एक बयान (जैसे ;या NSLog(@"");) डालें , या लेबल के बाद एक यौगिक विवरण (कोष्ठक) के अंदर घोषणा को लपेटें।
पीटर होसी

धन्यवाद, यह उत्तर मदद
inix


3
case 0: {
    Loading my nib file;
    break; 
}
case 1: {
    Loading another nib file;
    break; 
}
Note that if you don't have an assignment (x = y) right after the case it won't be a problem. For example:
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.