1

whileループとswitchステートメントを使用しているときに、メインでいくつかのエラーが発生します。中括弧を確認しましたが、タイプミスを見つけることができません。誰かが問題を見ることができますか?

bool menu = true;
    while(menu)// Loop to revert back to menu when choice is not compatable with options.
    {
    int selection;
    cout<< "Choice: ";
    cin>> selection;

        switch(selection)
        {
        case 1:
            cout<< "View Elements.";
            Array.print();
            break;
        case 2:
            cout<< "Delete Element. ";
            break;
        case 3:
            cout<< "Delete All Elements. ";
            //Array.clear(OrderedArray);
            break;
        case 4:
            cout<< "Insert Element. ";
            //Array.Insert();
            break;
        case 5:
            cout<< "Search for Element. ";
            bool searchMenu = true;
            while(searchMenu)
            {
            int searchSelection;
            cout<< "Choice: ";
            cin>> searchSelection;

            switch(searchSelection)
            {
                case 1:
                cout<< "Linear Search. ";
                //Array.linearSearch();
                    break;

                case 2:
                cout<< "Binary Search ";
                //Array.binarySearch();
                    break;
            }

            }
            break;
        case 6:
            cout<< "Store. ";
            bool storeMenu = true;
            while(storeMenu)
            {
            int storeSelection;
            cout<< "Choice: ";
            cin>> storeSelection;

            switch(storeSelection)
            {
                case 1:
                cout<< "Write File ";
                //Array.writeFile();
                    break;

                case 2:
                cout<< "Read File ";
                //Array.readFile();
                    break;
            }
            }
            break;
        case 7:
            cout<< "Sort. ";
            Array.sort();
            break;
        case 8:
            cout << "Exit.";
            cout << "Please press Enter to exit.";

        }
    }

これらはエラーです:

error C2360: initialization of 'searchMenu' is skipped by 'case' label  c:\users\conor\documents\college\c++\projects\repeat - ordered array\repeat - ordered array\orderedarray.cpp    71  1   Repeat - Ordered Array

error C2360: initialization of 'storeMenu' is skipped by 'case' label   c:\users\conor\documents\college\c++\projects\repeat - ordered array\repeat - ordered array\orderedarray.cpp    94  1   Repeat - Ordered Array

error C2360: initialization of 'searchMenu' is skipped by 'case' label  c:\users\conor\documents\college\c++\projects\repeat - ordered array\repeat - ordered array\orderedarray.cpp    94  1   Repeat - Ordered Array

error C2360: initialization of 'storeMenu' is skipped by 'case' label   c:\users\conor\documents\college\c++\projects\repeat - ordered array\repeat - ordered array\orderedarray.cpp    98  1   Repeat - Ordered Array

error C2360: initialization of 'searchMenu' is skipped by 'case' label  c:\users\conor\documents\college\c++\projects\repeat - ordered array\repeat - ordered array\orderedarray.cpp    98  1   Repeat - Ordered Array`
4

3 に答える 3

4

case ステートメントのコードが 2 ~ 3 行を超えると、おそらく別の関数に変換する必要があります。特にこれらのネストされたメニューでは。他の答えは、コンパイラが case ステートメントで変数を定義することについて不平を言っているということです。コード レビュー担当者は、switch ステートメントが複雑すぎると文句を言うでしょう。

于 2012-08-16T15:40:16.530 に答える
2

{ }switch ステートメント内の新しいブロック ( ) 内で変数定義をラップする必要があります。つまり、

switch (var) {
case X: {
    bool var = here;
}
}
于 2012-08-16T15:37:55.013 に答える
1

caseローカル スコープを作成しない限り、ブロック内で変数を作成して初期化することはできません。

switch(Foo)
{
    case A:
    int a = 0; <== error
    break;

    case B:
    {
        int b = 0; <== ok
    }
    break;
}
于 2012-08-16T15:38:21.610 に答える