2010-11-01 64 views
2

我使用的Objective-C对象时switch语句中得到一个编译错误对象 - 对象:奇编译器错误时使用switch语句

switch (myConstant) 
{ 
    case 0: 
     UIViewController *myController = [[[UIViewController alloc] init] autorelease]; 
     [self.navigationController pushViewController:myViewController animated:YES]; 
     break; 
    case 1: 
     // stuff 
     break; 
    default: 
     break; 
} 

的错误状态:

Expected expression before 'UIViewController'
'myViewController' undeclared (first use in this function)

我知道第二个错误是第一个错误的直接结果,但我不明白为什么我首先得到'预期表达式'错误...

如果我把;case 0:行的末尾,那么它会编译,但我不应该这样做,不是吗?

这也将无法被编译,用相同的错误:

switch (0) 
{ 
    case 0: 
     int a = 0; 
     break; 
    default: 
     break; 
} 

然而,如果我宣布int a;外部的开关组,那么a = 0;编译罚款。

我以为我明白了switch语句 - 显然我不知道。有人能解释一下吗?

+0

您应该购买一本关于C语言的书。交换机内部的情况必须跟着一个声明。你跟着它的声明,这不是一个声明。一个 ”;”本身就是一个空洞的陈述。除了最简单的情况外,最好总是使用复合语句{...}。 – gnasher729 2014-06-20 09:45:27

+0

@ gnasher729谢谢你让我知道这4年后;) – Jasarien 2014-06-26 13:13:08

回答

7

如果您声明新变量,只需在案例中添加{}。 switch语句的case部分不是用C声明变量的正确范围。

case 0: 
    { 
     int a = 0; 
     break; 
    } 
... 
+0

哦,当然...看起来我有一个主要的大脑放屁...谢谢! – Jasarien 2010-11-01 12:45:04

+0

我计划接受 - 然而似乎有一个10分钟的时间才能被允许接受新问题的答案。我分心了 - 抱歉。 – Jasarien 2010-11-02 01:13:51