'case'标签跳过'element'的初始化

时间:2013-02-03 04:20:17

标签: c++ debugging

我不明白为什么我会收到错误:

  'case'标签跳过'element'的初始化。

有人可以向我解释一下吗?

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;
    }
}

2 个答案:

答案 0 :(得分:118)

尝试使用case{},并将所有陈述放在{}内。

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

您应该将所有这些语句放在函数中,并保持case语句清楚。例如,写下这种风格:

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

请参阅link

答案 1 :(得分:5)

当一个变量在一个case中声明时,下一个case在技术上仍然在同一范围内,因此您可以在那里引用它,但是如果您点击case而未点击此变量首先,你最终会调用一个未初始化的变量。此错误阻止了这一点。

您需要做的就是在switch语句之前定义它,或者在退出特定{ }之前使用花括号case来确保它超出范围。