error: el tipo de matriz tiene un tipo de elemento incompleto typedef

Estoy haciendo un juego de la vida en C. Me dijeron que usara typedef y enumeración siempre que sea posible, así que hice un state typedef para indicar si una celda está DEAD o ALIVE . Hice una matriz 3d que contiene todas las tablas en todas las generaciones. cuando trato de usar la matriz como un parámetro de una función, dice error: array type has incomplete element type . ¿Hice mal el typedef? ¿No puedes tener matrices de tipos definidos por el usuario? Aquí está mi código:

 #include  #include  typedef enum { DEAD, ALIVE } state; void nextGeneration(state[][][], int, int, int); int numberOfNeighbours(state[][][], int, int, int); void printGeneration(state[][][], int, int, int); int main(void) { FILE *filePath; int boardHeight; int boardWidth; int requestedGenerations; state board[100][10][10] = { DEAD }; int h; int w; if((filePath = fopen("file1", "r")) == NULL) { fprintf(stderr, "No such file.\n"); exit(1); } if(fscanf(filePath, "%d %d %d", &requestedGenerations, &boardHeight, &boardWidth) != 3) { fprintf(stderr, "File doesn't contain the number of requested generations or the board's size.\n"); exit(2); } for (h = 0; h < boardHeight; h++) for(w = 0; w  0) { nextGeneration(board, requestedGenerations--, boardHeight, boardWidth); printGeneration(board, requestedGenerations, boardHeight, boardWidth); } } void nextGeneration(state board[][][], int requestedGeneration, int boardHeight, int boardWidth) { int h; int w; int currentNumOfNeighbours; for(h = 0; h < boardHeight; h++) for(w = 0; w < boardHeight; w++) { currentNumOfNeighbours = numberOfNeighbours(board, requestedGeneration, h, w); if(board[requestedGeneration][h][w] == ALIVE) { if(currentNumOfNeighbours == 2 || currentNumOfNeighbours == 3) board[requestedGeneration + 1][h][w] == ALIVE; } else if(currentNumOfNeighbours == 3) board[requestedGeneration + 1][h][w] == ALIVE; } } } int numberOfNeighbours(state board[][][], int requestedGeneration, int h, int w) { int result = 0; if(board[requestedGeneration][h][w + 1]) result++; if(board[requestedGeneration][h][w - 1]) result++; if(board[requestedGeneration][h + 1][w]) result++; if(board[requestedGeneration][h - 1][w]) result++; if(board[requestedGeneration][h + 1][w + 1]) result++; if(board[requestedGeneration][h - 1][w + 1]) result++; if(board[requestedGeneration][h + 1][w - 1]) result++; if(board[requestedGeneration][h + 1][w - 1]) result++; return result; } void printGeneration(state board[][][], int requestedGeneration, int boardHeight, int boardWidth) { int h; int w; for(h = 0; h < boardHeight; h++) { for(w = 0; w < boardWidth; w++) printf("%d", board[requestedGeneration][h][w]); printf("\n"); } } 

Mensajes de error reales:

 program1.c:4: error: array type has incomplete element type program1.c:5: error: array type has incomplete element type program1.c:6: error: array type has incomplete element type program1.c: In function 'main': program1.c:31: error: type of formal parameter 1 is incomplete program1.c:32: error: type of formal parameter 1 is incomplete program1.c: At top level: program1.c:35: error: array type has incomplete element type program1.c: In function 'nextGeneration': program1.c:43: error: type of formal parameter 1 is incomplete program1.c: At top level: program1.c:52: error: array type has incomplete element type program1.c:65: error: array type has incomplete element type 

Cualquier ayuda sería muy apreciada, gracias :).

Debe dar tamaño a las dos últimas dimensiones de la matriz en la definición de la función, por ejemplo

  #define y 10 #define z 10 void nextGeneration(state board[][y][z], int requestedGeneration, int boardHeight, int boardWidth) { .... } int numberOfNeighbours(state board[][y][z], int requestedGeneration, int h, int w) { .... } 

Eso es para darle al sistema una pista sobre cómo calcular el índice de un elemento cuando intenta acceder a él. Recuerde que la matriz (sin importar la cantidad de dimensiones que tenga) es solo una parte continua de la memoria, por lo que cuando indexa en su board[requestedGeneration][h][w] matriz board[requestedGeneration][h][w] comstackdor genera un código así.

 *(board + requestedGeneration * 10 * 10 + h * 10 + w )