各構造体が天体を表す構造体の配列を作成しようとしています。
私は構造体の経験があまりないので、配列全体の代わりに構造体を使用することにしました。ただし、さまざまなエラーが発生し続けます。さまざまなスレッドや StackOverflow で見た手法 ( C の Array of structsやC - initialize array of structsなど) を実装しようとしましたが、すべてが適用できるわけではありませんでした。
ここまで読んだ方への追加情報: 動的にする必要はありません。事前にすべてのサイズを把握/定義しています。また、引数を定義したいくつかの異なるメソッド (つまり 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
)。
この配列をいくつかの異なる方法で使用しますが、最も簡単で最もスペースを消費しない方法は、メインの単純化された形式です。ここでは、何らかの方法で変数を変更する前に、変数を確実に設定するために、各構造体のすべての変数を初期化します。
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
ファイル内にあります。