各構造体が天体を表す構造体の配列を作成しようとしています。
私は構造体についてあまり経験がないので、配列の代わりに構造体を使うことにしました。しかし、さまざまなエラーに遭遇し続けています。私はさまざまなスレッドやStack Overflowで見たテクニック(C の構造体の配列そしてCで構造体の配列を初期化する) ですが、すべてが当てはまるわけではありません。
ここまで読んでくださった方のために、さらに情報: これらを動的にする必要はなく、すべてのサイズを事前に把握/定義しています。また、定義された引数を持つ複数の異なるメソッドでこれにアクセスするため、これをグローバル配列にする必要があります (つまり、GLUT方法)。
ヘッダーで構造体を定義する方法は次のとおりです。
struct body
{
double p[3]; // Position
double v[3]; // Velocity
double a[3]; // Acceleration
double radius;
double mass;
};
構造体の内部を定義する前に定義している他のグローバル変数のリストがあり、そのうちの 1 つがこの構造体の配列です (基本的に、私の不明瞭な話し方でわかりにくい場合は、以下の行が上記の行の上にあります)。
struct body bodies[n];
ご存知のとおり、n
は私が正当に定義したものです (つまり#define n 1
)。
この配列はいくつかの異なる方法で使用しますが、最も簡単でスペースを消費しない方法は、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;
}
現在直面しているエラーは、nbody.c:32:13: error: array type has incomplete element type
構造体の配列を作成している行 32 にあります。
int main(void)
最後にもう 1 つ説明しておきます。ヘッダーとは、同じファイル内の の上のスペースを意味します*.c
。
ベストアンサー1
使用:
#include<stdio.h>
#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;
}
これは問題なく動作します。ところで、あなたの質問はあまり明確ではありませんでしたので、ソースコードのレイアウトを上記と一致させてください。