각 구조체가 천체를 나타내는 구조체 배열을 만들려고합니다.
나는 구조체에 대한 경험이 많지 않기 때문에 전체 배열 대신에 구조체를 사용하기로 결정했습니다. 그러나 나는 계속해서 수많은 다른 오류가 발생합니다. 다양한 스레드와 StackOverflow (예 : C 및 C의 구조체 배열-구조체 배열 초기화) 에서 본 기술을 구현하려고 시도했지만 모두 적용 할 수있는 것은 아닙니다.
이 글을 읽어보신 분들을위한 추가 정보 : 저는이 중 어떤 것도 동적 일 필요는 없습니다. 모든 것의 크기를 미리 알고 / 정의합니다. 또한 인수를 정의한 여러 다른 메서드 (예 : GLUT 메서드)에서이 항목에 액세스하므로 전역 배열이되어야합니다.
이것은 헤더에서 구조체를 정의하는 방법입니다.
struct body
{
double p[3];//position
double v[3];//velocity
double a[3];//acceleration
double radius;
double mass;
};
구조체의 내부를 정의하기 전에 정의하고있는 다른 전역 변수 목록이 있으며 그중 하나는이 구조체의 배열입니다 위의 항목 위에 있음) :
struct body bodies[n];
아시다시피, n
제가 합법적으로 정의한 것입니다 (예 :) #define n 1
.
이 배열을 여러 가지 다른 방법으로 사용하지만 가장 쉽고 공간을 적게 차지하는 배열은 메인의 단순화 된 형태입니다. 여기에서는 각 구조체의 모든 변수를 초기화하여 어떤 식 으로든 수정하기 전에 변수를 확실하게 설정합니다.
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;
}
내가 직면 한 현재 오류는 nbody.c:32:13: error: array type has incomplete element type
32 행이 구조체 배열을 만드는 곳입니다.
마지막 설명은, 헤더 나는 위의 공간을 의미 int main(void)
하지만 같은에서 *.c
파일을.
struct body bodies[n];
하기 전에struct body {}
선언하지 않습니까?