2010-01-10 9 views
74

Corte a la caza He recreado mi problema, ya que es bastante fácil de entender.Error de compilación con: cambiar, "expresión esperada antes"

este cumple sin error:

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

esta compila con el error y sólo falta el NSLog():

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

se genera un error en tiempo de compilación "expresión esperada antes de 'NSString' "

¿Me falta algo aquí?

+0

Ver johne

+0

Recuerdo una sentencia switch/case con un error similar, se Solía ​​desaparecer cuando agrego un comentario en algún lugar dentro del bloque de casos. Magic –

Respuesta

154

En C normal, debe encerrar esto entre paréntesis en ambos casos. Sospecho que esto puede arreglar el problema:

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

Ver this SO question para obtener más información.

Otra forma de evitar este problema es colocar una declaración entre la etiqueta del caso y la primera declaración como lo ha hecho en su ejemplo de trabajo anterior. Vea los comentarios y la respuesta de Quinn Taylor para más información.

+0

Interesante. No probé el enfoque de soporte. – Eimantas

+0

Sí, esto solucionó el problema. Solo corría con el código de xcode relleno que no los usa. Gracias. – Ross

+0

He encontrado este problema antes, lo resolví usando {} yo mismo, es bueno ver que era la solución correcta. +1 para ti Dan. –

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: 
Cuestiones relacionadas