web-dev-qa-db-ja.com

コンパイルエラー:switch、「expected expression before」

それはかなり自明であるため、問題を再現しました。

これはエラーなしで準拠します:

switch (n) {
    case 1:
        NSLog(@"");
        NSString *aStr;
        break;
    default:
        break;
    }

これはエラーでコンパイルされますそして、NSLog()が欠落しているだけです:

switch (n) {
    case 1:
        NSString *aStr;
        break;
    default:
        break;
    }

コンパイル時にエラーをスローします。「 'NSString'の前に式が必要です」

ここに何かが足りませんか?

77
Ross

通常のCでは、どちらの場合もこれを括弧で囲む必要があります。私はこれがあなたの問題を解決するかもしれないと思う:

case 1:
{
    NSLog(@"");
    NSString *aStr;
    break;
}

詳細については、 this SO question を参照してください。

この問題を回避する別の方法は、上記の実例で行ったように、caseラベルと最初の宣言の間にステートメントを置くことです。詳細については、コメントとクインテイラーの回答を参照してください。

159
Dan Olson

括弧なしのcaseおよびCベース言語の他の多くのコンテキストで、変数をfirstステートメントとして宣言することはできません。詳細については、 switchステートメント内の変数の宣言 を参照してください。

20
Quinn Taylor
case 0: {
    Loading my nib file;
    break; 
}
case 1: {
    Loading another nib file;
    break; 
}
Note that if you don't have an assignment (x = y) right after the case it won't be a problem. For example:
2
kiran kumar