私は各構造体が天体を表す構造体の配列を作ろうとしています。
私は構造体の経験があまりないため、配列全体ではなく構造体を使用することにしました。ただし、さまざまなエラーが何度も発生します。Iは、(例えば、Iは、様々なスレッド上とStackOverflowの上で見たことの技術を実装しようとした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
)。
私はいくつかの異なる方法でこの配列を使用していますが、最も簡単で最もスペースを消費しない方法は、私のメインの単純化された形式です。ここで、各構造体のすべての変数を初期化します。何らかの方法で変数を変更する前に、変数を確実に設定します。
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 {}
宣言しませんか?