2011-03-24 19 views
6

Estoy desarrollando una aplicación donde necesito definir varias constantes que se usarán en más de una clase. He definido todas mis constantes en un archivo .h (digamos "constants.h") e importó ese archivo en el archivo myAppName_Prefix.pch ubicado en la carpeta "Otras fuentes" del proyecto. Las clases que usan estas constantes se compilan sin ningún error sino con otras clases, donde declaré algunos UISwipeGestureRecognizers, están tirando de error como "se esperaba un identificador numérico constante antes de" este es el fragmento de código de una de las clases que se muestra el error:Problema con Macros (#define) "que muestra el error del identificador esperado antes de la constante numérica", en el iPad

if (gesture.direction==UISwipeGestureRecognizerDirectionLeft) 

he definido mis constantes como:

#define heading 1 
#define direction 2 
#define statement 3 
#define refLink 4 
#define correctResponse 5 
#define incorrect1Response 6 

si yo los defino en cada clase individual, entonces todo lo que trabaja bien. ¿Puede alguien sugerirme una forma de cómo resolver este problema.

Respuesta

4

Después de preprocesamiento su código

if (gesture.direction==UISwipeGestureRecognizerDirectionLeft) 

se parece a esto

if (gesture. 2==UISwipeGestureRecognizerDirectionLeft) 

y esto obviamente no es un código válido.

La solución es colocar una cadena de espacio de nombres única delante de sus #defines.

#define hariDirection 2 

o

#define kDirection 2 

O en mi humilde opinión la mejor solución: no utilice #define

typedef enum { 
    heading = 1, 
    direction, 
    statement, 
    refLink, 
    correctResponse, 
    incorrect1Response, 
} MyDirection; 

Esto va a hacer lo mismo, pero no va a entrar en conflicto con otro método y nombres de variables.

1

Haga sus nombres sean únicos constantes:

#define kHeading 1 
#define kDirection 2 
#define kStatement 3 
#define kRefLink 4 
#define kCorrectResponse 5 
#define kIncorrect1Response 6 
2

Recibía el mismo mensaje de error de gcc.

error: expected ')' before numeric constant 
#define UNIQUE_NAME 0 

Después de comprobar que mis nombres de las variables eran únicos, me di cuenta que tenía un error tipográfico en el punto en el código donde se estaba utilizando la constante.

#define UNIQUE_NAME 0 
//... 
if (test_variable UNIQUE_NAME) { //missing == 
//... 
} 

error simple, pero difícil de encontrar porque gcc me estaba apuntando hacia la declaración #define

Cuestiones relacionadas