2010-11-01 34 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