web-dev-qa-db-fra.com

l'initialisation de 'element' est ignorée par l'étiquette 'case'

Je ne comprends pas pourquoi je reçois l'erreur:

l'initialisation de 'élément' est ignorée par l'étiquette 'cas'.

Quelqu'un peut-il m'expliquer s'il vous plaît?

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

Essayez d’emballer case avec {}, et mettez toute votre déclaration à l'intérieur de {}.

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

Vous devriez mettre toutes ces instructions dans des fonctions, gardez case statement clair. Par exemple, écrivez ce style:

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

Voir lien

122
billz

Quand une variable est déclarée dans un case, la suivante case est techniquement toujours dans la même portée, vous pouvez donc la référencer ici, mais si vous tapez cela case sans toucher celle-ci vous devez d’abord appeler une variable non initialisée. Cette erreur empêche cela.

Tout ce que vous avez à faire est de le définir avant l'instruction switch ou d'utiliser des accolades { } pour s’assurer qu’il sort de la portée avant de quitter un case spécifique.

5
Rhys Thompson