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

Com*_*erd 61 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;
    }
}
Run Code Online (Sandbox Code Playgroud)

bil*_*llz 126

尝试换case{},并把所有的语句中{}.

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

你应该把所有这些陈述放在函数中,保持case声明清楚.例如,写下这种风格:

case 1:
   initializeElement();
   break;
case 2:
   doSomethingElse();
   break;
Run Code Online (Sandbox Code Playgroud)

链接

  • 范围问题,`case:`直到`break`才引入新的范围,所以你必须使用`{}` (16认同)
  • @billiz为什么要把{}解决问题? (7认同)
  • http://stackoverflow.com/questions/92396/why-cant-variables-be-declared-in-a-switch-statement (3认同)
  • 我还是不太明白,我能阅读的任何文章都能更好地理解??? (2认同)

小智 6

当在一个变量中声明一个变量时case,从case技术上讲,下一个变量仍在相同的范围内,因此您可以在此引用它,但是如果您case未首先单击该变量就将其引用,则最终将调用一个未初始化的变量。此错误可以防止这种情况。

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