I think I'm going blind, because I can't figure out where the syntax error is in this code:
if( cell == nil ) { titledCell = [ [ [ TitledCell alloc ] initWithFrame:CGRectZero reuseIdentifier:CellIdentifier ] autorelease ]; switch( cellNumber ) { case 1: NSString *viewDataKey = @"Name"; etc...
When I try to compile it, I'm getting an Error: syntax error before '*' token on the last line.
Sorry for such a basic question, but what am I missing?
Do not declare variables inside a switch statement before the first case label. According to the C Standard, 6.8.
Declaring a variable inside a switch block is fine. Declaring after a case guard is not.
The switch statement doesn't accept arguments of type long, float, double,boolean or any object besides String.
I don't have a suitable Objective-C compiler on hand, but as long as the C constructs are identical:
switch { … }
gives you one block-level scope, not one for each case
. Declaring a variable anywhere other than the beginning of the scope is illegal, and inside a switch
is especially dangerous because its initialization may be jumped over.
Do either of the following resolve the issue?
NSString *viewDataKey; switch (cellNumber) { case 1: viewDataKey = @"Name"; … } switch (cellNumber) { case 1: { NSString *viewDataKey = @"Name"; … } … }
You can't declare a variable at the beginning of a case statement. Make a test case that just consists of that and you'll get the same error.
It doesn't have to do with variables being declared in the middle of a block — even adopting a standard that allows that won't make GCC accept a declaration at the beginning of a case statement. It appears that GCC views the case label as part of the line and thus won't allow a declaration there.
A simple workaround is just to put a semicolon at the beginning of the case so the declaration is not at the start.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With