1. ホーム
  2. c

[解決済み] C言語で構造体の配列を作るには?

2022-03-05 19:03:47

質問

各構造体が天体を表す構造体の配列を作ろうとしています。

構造体を使った経験があまりないので、配列の代わりに構造体を使ってみようと思ったわけです。しかし、さまざまなエラーに何度も遭遇してしまいます。さまざまなスレッドや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 ファイルを作成します。

解決方法は?

#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;
}

ところで、あなたの質問はあまり明確ではなかったので、あなたのソースコードのレイアウトを上記と一致させてください。