2013-02-03 11 views
47

द्वारा छोड़ी गई है मुझे समझ नहीं आता क्यों मैं त्रुटि हो रही है:प्रारंभ 'मामले' लेबल

initialization of 'element' is skipped by 'case' label.

कोई मुझे समझा सकते हैं?

void LinkedList::process_example(int choice) { 
    switch(choice) { 
    case 1: 
     cout << endl << endl << "Current S = "; 
     this->printSet(); 

     cout << "Enter an element :"; 
     char* element = "lol"; 

     //cin>>element; 
     cin.clear(); 
     cin.ignore(200, '\n'); 

     this->Addelementfromback(element); //error is here 
     cout << endl << endl << "Current S = "; 

     this->printSet(); 
     break; 

    case 2: 
     this->check_element(); 
     break; 

    case 3: 
     cout << endl << endl; 
     cout << "Current Set S = "; 
     this->printSet(); 

     cout << endl << "S has "; 
     int count = this ->check_cardinality(); 
     cout << count << " elements"; 
     break; 
    } 
} 
+0

यह त्रुटि बहुत स्पष्ट है, एक स्विच स्टेटमेंट का भी अजीब उपयोग है। – Rapptz

+6

प्रत्येक 'केस' एक नया दायरा पेश नहीं करता है (केवल '{}' ब्लॉक ऐसा करते हैं)। तो जब आप एक मामले के अंदर एक चर घोषित करते हैं, तो इसे अपने स्वयं के ब्लॉक में रखना चाहिए। – Cameron

उत्तर

101
{} साथ

कोशिश रैप case, और {} अंदर अपने सभी बयान डाल दिया।

case 1: 
{ 
    cout << endl << endl << "Current S = "; 
    this->printSet();  
    // and other mess 
} 
break; 

आप कार्यों में इन सभी बयान शब्दों में कहें, case बयान स्पष्ट रखना चाहिए। उदाहरण के लिए, इस शैली लिखें:

case 1: 
    initializeElement(); 
    break; 
case 2: 
    doSomethingElse(); 
    break; 

link

+6

@ बिलीज़ {} समस्या को हल क्यों करता है ??? – Computernerd

+11

स्कोप इश्यू, 'केस:' 'ब्रेक 'तक नया दायरा पेश नहीं करता है, इसलिए आपको' {} ' – billz

+2

का उपयोग करना होगा, मुझे अभी भी समझ में नहीं आता है, कोई भी लेख जो मैं बेहतर समझने के लिए पढ़ सकता हूं ??? – Computernerd

0

देखें जब एक चर एक case में घोषित किया जाता है, अगले case तकनीकी रूप से अब भी वही दायरे में है, तो आप इसे वहाँ संदर्भ सकता है, लेकिन अगर आपको लगता है कि मारा case इसे पहले मारने के बिना आप एक अनियमित चर को कॉल करना समाप्त कर देंगे। यह त्रुटि उस को रोकती है।

सभी या तो आप switch बयान से पहले इसे परिभाषित या घुंघराले ब्रेसिज़ { } का उपयोग यकीन है कि यह एक विशिष्ट case बाहर निकलने से पहले दायरे से बाहर चला जाता है बनाने के लिए करने की जरूरत है।

संबंधित मुद्दे