【发布时间】:2012-05-15 03:17:41
【问题描述】:
我正在尝试创建一个结构数组,其中每个结构代表一个天体。
我对结构没有太多经验,这就是为什么我决定尝试使用它们而不是一大堆数组。但是,我不断遇到许多不同的错误。我尝试实现我在各种线程和 StackOverflow 上看到的技术(例如 Array of structs in C 和 C - initialize array of structs),但并非所有技术都适用。
对于已经阅读本文的人的更多信息:我不需要任何动态,我事先知道/定义了所有内容的大小。我还需要将它作为一个全局数组,因为我在几种不同的方法中访问它,这些方法已经定义了参数(即 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)。
我在几种不同的方法中使用这个数组,但最简单且占用空间最少的一种是我的 main.js 的简化形式。这里我初始化了每个结构中的所有变量,只是为了在我以某种方式修改它们之前设置变量:
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 {}之前声明struct body bodies[n];吗? -
请注意,当数组的大小超过系统上程序的堆栈大小时(这完全超出了程序员的控制范围),使用可变长度数组通常会导致神秘的错误或崩溃。最好使用 malloc() 处理这种事情。
-
@adrian 我认为因为它是
#defined 值,所以它不是可变的。它将与struct body bodies[1]相同,或者与n的值相同。 -
@RedwolfPrograms 啊抱歉,我没有考虑到这一点。作为记录,如果
n是一个可以在编译时确定的常量,那么您可能是安全的。