2009-03-17 8 views
8

tengo este código en mi archivo principal:¿Cómo puedo definir una matriz en mi archivo de encabezado Objective-C?

int grid[] = { 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 
       1 , 2 , 3 , 2 , 3 , 2 , 3 , 1 , 
       1 , 0 , 0 , 0 , 0 , 0 , 0 , 1 , 
       1 , 0 , 1 , 0 , 1 , 0 , 1 , 1 , 
       1 , 0 , 1 , 0 , 0 , 0 , 0 , 1 , 
       1 , 0 , 0 , 0 , 0 , 0 , 1 , 1 , 
       1 , 1 , 1 , 1 , 1 , 1 , 1 , 0 }; 

¿Cómo se define en mi cabecera para que pueda acceder a la variable a lo largo de mi clase?

Respuesta

8
extern int grid[]; 

Supongamos que tenía algo de código como esto:

int grid[] = { 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 
     1 , 2 , 3 , 2 , 3 , 2 , 3 , 1 , 
     1 , 0 , 0 , 0 , 0 , 0 , 0 , 1 , 
     1 , 0 , 1 , 0 , 1 , 0 , 1 , 1 , 
     1 , 0 , 1 , 0 , 0 , 0 , 0 , 1 , 
     1 , 0 , 0 , 0 , 0 , 0 , 1 , 1 , 
     1 , 1 , 1 , 1 , 1 , 1 , 1 , 0 }; 

int arr_sum(int* arr, int len) 
{ 
    int sum = 0; 
    for (int i = 0; i < len; i++) { 
      sum += arr[i]; 
    } 
    return sum; 
} 

int main(int argc, char** argv) 
{ 
    printf("%d\n", arr_sum(grid, sizeof(grid)/sizeof(int))); 
    return 0; 
} 

Si quería separar esto en dos archivos diferentes, por ejemplo, usted podría tener la siguiente, por ejemplo:

en grid.c:

int grid[] = { 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 
     1 , 2 , 3 , 2 , 3 , 2 , 3 , 1 , 
     1 , 0 , 0 , 0 , 0 , 0 , 0 , 1 , 
     1 , 0 , 1 , 0 , 1 , 0 , 1 , 1 , 
     1 , 0 , 1 , 0 , 0 , 0 , 0 , 1 , 
     1 , 0 , 0 , 0 , 0 , 0 , 1 , 1 , 
     1 , 1 , 1 , 1 , 1 , 1 , 1 , 0 }; 

en main.c:

extern grid[]; 

int arr_sum(int* arr, int len) 
{ 
    int sum = 0; 
    for (int i = 0; i < len; i++) { 
      sum += arr[i]; 
    } 
    return sum; 
} 

int main(int argc, char** argv) 
{ 
    printf("%d\n", arr_sum(grid, sizeof(grid)/sizeof(int))); 
    return 0; 
} 
+0

¿cómo puedo construir la matriz en el archivo de implementación? –

+0

No debería necesitar construirlo en ningún otro lado. Tenga el código que indicó anteriormente en main.c y coloque "extern int grid []" en un archivo de encabezado común utilizado por los otros archivos fuente que usan la cuadrícula. O si no desea el encabezado, simplemente coloque el extern donde se use la grilla. – Parappa

+0

compila, pero si trato de acceder a la matriz desde una función diferente a la que estaba definida, el compilador arroja un error:/ –

6

No puede definirlo en su encabezado. Tienes que declaran que en su encabezamiento y definen en una fuente (.m) Archivo:

// In MyClass.h 
extern int grid[]; 

// In MyClass.m 
int grid[] = {...}; 
+0

compila, pero cuando estoy en una función diferente en el archivo * .m, el compilador se queja de que no está definido. –

+0

desea definirlo en el "nivel superior" del archivo .m (es decir, fuera de todas las funciones). Por convención, las variables globales como esta se definen en la parte superior del archivo .m, justo debajo de las sentencias #import o #include. –

+0

Cualquier archivo de encabezado que necesite usar la cuadrícula [] necesita tener una declaración "extern int grid []" en ella, o necesita #incluir otro archivo de encabezado que tenga la declaración extern. Ver también http://stackoverflow.com/questions/309801/declarations-definitions-initializations-inc-c-c-java-and-python –

Cuestiones relacionadas