2010-01-10 29 views
74

Cắt theo đuổi tôi đã tạo lại sự cố của mình vì nó khá tự giải thích.Biên dịch lỗi với: chuyển đổi, "biểu thức mong đợi trước"

này tuân thủ mà không có lỗi:

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

này biên dịch với lỗi và nó chỉ thiếu NSLog():

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

nó ném một lỗi lúc biên dịch "biểu dự kiến trước 'NSString' "

Tôi có thiếu gì đó ở đây không?

+0

Xem johne

+0

Tôi nhớ một câu lệnh switch/trường hợp với một lỗi tương tự, nó được sử dụng để biến mất khi tôi thêm một bình luận ở đâu đó trong khối trường hợp .. Magic –

Trả lời

154

Trong C bình thường, bạn phải đính kèm điều này trong ngoặc trong cả hai trường hợp. Tôi nghi ngờ điều này có thể khắc phục sự cố của bạn:

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

Xem this SO question để biết thêm thông tin.

Một cách khác để giải quyết vấn đề này là đặt một tuyên bố giữa nhãn trường hợp và khai báo đầu tiên như bạn đã làm trong ví dụ làm việc ở trên. Xem nhận xét và câu trả lời của Quinn Taylor để biết thêm thông tin.

+0

Thú vị. Không thử phương pháp tiếp cận khung. – Eimantas

+0

Có điều này khắc phục sự cố. Tôi chỉ đang chạy với mã số của xcode mà không sử dụng chúng. Cảm ơn. – Ross

+0

Tôi đã gặp vấn đề này trước đây, tôi đã giải quyết nó bằng cách sử dụng {} bản thân mình, tốt để xem đó là giải pháp đúng. 1 cho bạn Dan. –

20

Bạn không thể khai báo biến là câu hỏi đầu tiên trong một số case không có dấu ngoặc và trong nhiều ngữ cảnh khác bằng ngôn ngữ dựa trên C. Xem Declaring variables inside a switch statement để biết chi tiết.

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: 
Các vấn đề liên quan