85

エラーが発生する理由がわかりません:

「要素」の初期化は「ケース」ラベルによってスキップされます。

誰か説明してくれませんか?

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

2 に答える 2

158

でラップcaseしてみて{}、すべてのステートメントを の中に入れてください{}

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

これらすべてのステートメントを関数に入れ、caseステートメントを明確に保つ必要があります。たとえば、次のスタイルを記述します。

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

リンクを見る

于 2013-02-03T04:24:51.933 に答える
14

変数が 1 で宣言されている場合case、次caseは技術的には同じスコープ内にあるため、そこで参照できますが、case最初にこれをヒットせずにヒットすると、初期化されていない変数を呼び出すことになります。このエラーはそれを防ぎます。

あなたがする必要があるのは、switchステートメントの前にそれを定義するか、中括弧{ }を使用して、特定のcase.

于 2017-09-29T09:52:32.093 に答える