编译错误:切换,“预期表达式之前”

时间:2010-01-10 11:25:37

标签: iphone objective-c cocoa xcode xcode3.2

切入追逐我已经重新创建了我的问题,因为它是相当自我解释的。

符合条件且无错误:

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

编译错误,它只缺少NSLog():

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

在编译“'NSString'之前的预期表达式”时抛出错误“

我在这里错过了什么吗?

3 个答案:

答案 0 :(得分:158)

在正常的C中,你必须在两种情况下将其括在括号中。我怀疑这可能会解决您的问题:

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

有关详细信息,请参阅this SO question

解决此问题的另一种方法是在案例标签和第一个声明之间放置一个语句,就像在上面的工作示例中所做的那样。有关详细信息,请参阅评论和Quinn Taylor的答案。

答案 1 :(得分:20)

您不能将变量声明为case中没有括号的第一个语句,也不能在基于C语言的许多其他上下文中声明。有关详细信息,请参阅Declaring variables inside a switch statement

答案 2 :(得分:2)

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: