Подтвердить что ты не робот

Инициализация "элемента" пропущена меткой "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;
    }
}
4b9b3361

Ответ 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.