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

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

本文关键字:标签 case 初始化 element      更新时间:2023-10-16

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

"

元素"的初始化被"案例"标签跳过。

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

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

尝试用 {} 包装case,并将所有语句放在 {} 中。

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

你应该把所有这些语句放在函数中,保持case语句清晰。例如,编写此样式:

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

见链接

当一个变量在一个case中声明时,下一个case在技术上仍然在相同的范围内,所以你可以在那里引用它,但如果你点击那个case而不先点击这个,你最终会调用一个未初始化的变量。此错误可防止这种情况发生。

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