我不明白为什么我会收到错误:
'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;
}
}
答案 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
来确保它超出范围。