una tamaño saber que estructuras estructura como arreglo c struct calloc

c - tamaño - sizeof de un arreglo



Aplicación inválida de sizeof a tipo incompleto con una estructura (4)

Creo que el problema es que pones #ifdef lugar de #ifndef en la parte superior de tu archivo header.h .

Tengo una estructura donde pongo toda la información sobre los jugadores. Esa es mi estructura:

struct player{ int startingCapital; int currentCapital; int startingPosition; int currentPosition; int activePlayer; int canPlay; };

Y ese es mi principal:

#include <stdio.h> #include <stdlib.h> #include "header.h" int main(int argc, char *argv[]) { int s,i,numOfPlayers; struct player *players; printf("Give the number of players: /n"); scanf("%d",&numOfPlayers); players = (struct player *)calloc(numOfPlayers,sizeof(struct player)); system("PAUSE"); return 0; }

Le pido al usuario que proporcione el número de jugadores y luego trato de asignar la memoria necesaria. Pero estoy obteniendo este error de compilación que no puedo entender:

invalid application of `sizeof'' to incomplete type `player''


La causa de errores como "Aplicación inválida de sizeof a tipo incompleto con una estructura ..." es siempre la falta de una instrucción de inclusión. Intenta encontrar la biblioteca adecuada para incluir.


Significa que el archivo que contiene main no tiene acceso a la definición de la estructura del player (es decir, no sabe cómo se ve).

Intenta incluirlo en header.h o header.h una función tipo constructor que lo asigne si se trata de un objeto opaco.

EDITAR

Si su objetivo es ocultar la implementación de la estructura, haga esto en un archivo C que tenga acceso a la estructura:

struct player * init_player(...) { struct player *p = calloc(1, sizeof *p); /* ... */ return p; }

Sin embargo, si la implementación no debe ocultarse, es decir, main debería decir legalmente p->canPlay = 1 , sería mejor poner la definición de la estructura en header.h .


Su error también se muestra al intentar acceder al sizeof() de una matriz externa no inicializada:

extern int a[]; sizeof(a); >> error: invalid application of ''sizeof'' to incomplete type ''int[]''

Tenga en cuenta que obtendrá un error de array size missing sin la palabra clave extern .