Инициализация "элемента" пропущена меткой "case"
Я не понимаю, почему я получаю сообщение об ошибке:
инициализация "элемента" пропускается меткой "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;
}
}
Ответы
Ответ 1
Попробуйте обернуть case
с помощью {}
и поместить все ваше утверждение внутри {}
.
case 1:
{
cout << endl << endl << "Current S = ";
this->printSet();
// and other mess
}
break;
Вы должны поместить все эти утверждения в функции, сохранить оператор case
понятным. Например, напишите этот стиль:
case 1:
initializeElement();
break;
case 2:
doSomethingElse();
break;
Смотрите ссылку
Ответ 2
Когда переменная объявляется в одном case
, следующий case
технически все еще находится в той же области видимости, поэтому вы можете ссылаться на него там, но если вы нажмете этот case
, не нажав этот первый, вы в конечном итоге вызовете неинициализированная переменная. Эта ошибка предотвращает это.
Все, что вам нужно сделать, это либо определить его перед оператором switch
, либо использовать фигурные скобки { }
, чтобы убедиться, что он выходит из области действия до выхода из определенного case
.