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

10 浏览
0 Comments

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

这个问题已经在这里得到了答案

为什么不能在switch语句中声明变量?

我不明白为什么出现了以下错误:

\"element\"的初始化被\"case\"标签跳过了。

请有人可以解释一下吗?

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

admin 更改状态以发布 2023年5月23日
0
0 Comments

当一个变量在一个case中声明时,下一个case技术上仍然在同一个作用域内,因此你可以在那里引用它,但如果你在没有先触发这个case的情况下命中该case,你将调用一个未初始化的变量。这个错误会防止这种情况发生。

你所需要做的就是在switch语句之前定义它,或使用大括号{ }确保它在退出特定的case之前超出作用域。

0
0 Comments

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

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


您应该将所有这些语句放在函数中,保持case语句清晰。例如,采用以下样式编写:

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


< a href="/question/15170">link

0