¿Cómo se hace una serie de estructuras en C?

Estoy tratando de hacer una serie de estructuras donde cada estructura representa un cuerpo celeste para el problema en el que estoy trabajando en mi clase. No tengo mucha experiencia con las estructuras, por lo que decidí tratar de usarlas en lugar de un conjunto completo de matrices, sin embargo, sigo encontrando numerosos errores diferentes, a pesar de que he intentado implementar las técnicas que he visto en varios subprocesos y en stackoverflow (como en Array of structs in C y C – initialize array of structs ), sin embargo, no todos ellos eran aplicables, por lo que no pude copiar completamente la manera de hacerlo eso. Solo una advertencia antes de mostrarle lo que estoy tratando de hacer, no podré responder a los comentarios / preguntas / respuestas durante varias horas porque necesito acostarme porque he estado despierto durante demasiado tiempo, Realmente lo siento por esto, pero estoy realmente cansado después de haber tenido un día ocupado y haber trabajado en este problema durante varias horas.

Más información para quienes han leído hasta aquí: no necesito que esto sea dynamic, sé / defino el tamaño de todo de antemano. También necesito que esto sea una matriz global ( gasp VARIABLES GLOBALES ) ya que estoy accediendo a esto en varios métodos diferentes que tienen argumentos definidos (es decir, métodos GLUT).

Así es como estoy definiendo la estructura en mi encabezado:

struct body { double p[3];//position double v[3];//velocity double a[3];//acceleration double radius; double mass; }; 

Tengo una lista de otras variables globales que estoy definiendo antes de definir el interior de la estructura, y una de ellas es la matriz de esta estructura (básicamente, si estoy muy poco claro en mi discurso empañado, la línea siguiente está por encima de las cosas anteriores):

 struct body bodies[n]; 

Para que lo sepas, n es algo que he definido legítimamente (es decir, #define n 1 ).

Utilizo esta matriz en varios métodos diferentes, pero el más fácil y el que consume menos espacio es una forma simplificada de mi main donde inicializo todas las variables en cada una de las estructuras, solo para establecer las variables con certeza antes de modificarlas en algunas camino:

  int a, b; for(a = 0; a < n; a++) { for(b = 0; b < 3; b++) { bodies[a].p[b] = 0; bodies[a].v[b] = 0; bodies[a].a[b] = 0; } bodies[a].mass = 0; bodies[a].radius = 1.0; } 

El error actual que estoy enfrentando es nbody.c:32:13: error: array type has incomplete element type donde la línea 32 es donde estoy haciendo la matriz de las estructuras.

Gracias por toda la ayuda que se digne dar, prometo que me pondré en contacto con usted a más tardar dentro de 12 horas.

Una última aclaración, por encabezado me refiero al espacio sobre int main(void) pero en el mismo archivo * .c.

 #include #define n 3 struct body { double p[3];//position double v[3];//velocity double a[3];//acceleration double radius; double mass; }; struct body bodies[n]; int main() { int a, b; for(a = 0; a < n; a++) { for(b = 0; b < 3; b++) { bodies[a].p[b] = 0; bodies[a].v[b] = 0; bodies[a].a[b] = 0; } bodies[a].mass = 0; bodies[a].radius = 1.0; } return 0; } 

esto funciona bien Por cierto, su pregunta no fue muy clara, así que haga coincidir el diseño de su código fuente con el de arriba.

movimiento

 struct body bodies[n]; 

Después

 struct body { double p[3];//position double v[3];//velocity double a[3];//acceleration double radius; double mass; }; 

Descansa, todo se ve bien.

Creo que podrías escribirlo de esa manera también. También soy estudiante, así que entiendo tu lucha. Un poco tarde de respuesta, pero está bien.

 #include #define n 3 struct { double p[3];//position double v[3];//velocity double a[3];//acceleration double radius; double mass; }bodies[n]; 

Para ponerlo todo junto utilizando malloc() :

 int main(int argc, char** argv) { typedef struct{ char* firstName; char* lastName; int day; int month; int year; }STUDENT; int numStudents=3; int x; STUDENT* students = malloc(numStudents * sizeof *students); for (x = 0; x < numStudents; x++){ students[x].firstName=(char*)malloc(sizeof(char*)); scanf("%s",students[x].firstName); students[x].lastName=(char*)malloc(sizeof(char*)); scanf("%s",students[x].lastName); scanf("%d",&students[x].day); scanf("%d",&students[x].month); scanf("%d",&students[x].year); } for (x = 0; x < numStudents; x++) printf("first name: %s, surname: %s, day: %d, month: %d, year: %d\n",students[x].firstName,students[x].lastName,students[x].day,students[x].month,students[x].year); return (EXIT_SUCCESS); } 

Ese error significa que el comstackdor no puede encontrar la definición del tipo de tu estructura antes de la statement de la matriz de estructuras, ya que estás diciendo que tienes la definición de la estructura en un archivo de cabecera y el error está en nbody.c entonces debería verificar si está incluyendo correctamente el archivo de encabezado. Verifique su #include y asegúrese de que la definición de la estructura esté completa antes de declarar cualquier variable de ese tipo.