我正在尝试创建一个结构体数组,其中每个结构体代表一个天体。
我对结构体并不是很熟悉,这就是为什么我决定尝试使用它们而不是一堆数组的原因。然而,我一直遇到许多不同的错误。我已经尝试实现我在各种线程和Stack Overflow上看到的技术(例如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行是我正在创建结构体数组的地方。最后澄清一下:我所说的头文件是指在同一个
*.c
文件中 int main(void)
上面的空间。
struct body {}
声明之前有没有声明struct body bodies[n];
? - Jack#define
的值,它并不是一个变量。这将只是struct body bodies[1]
的同义词,或者无论n
的值是什么。 - Radvylf Programs