我使用Vector操纵和重力常数创建了重力模拟器。
我为主体定义了2个结构。
typedef struct {
double vector[3];
} Vector;
typedef struct {
Vector colour;
double mass;
double radius;
Vector position;
Vector velocity;
Vector accel;
} Object;
我有许多矢量算法功能,包括:
Vector VectorUnit(Vector a) {
Vector b;
int i;
for (i = 0; i < VECTOR_DIM; i++)
b.vector[i] = (a.vector[i]) / (VectorMag(a));
return (b);
}
当我运行函数的内部函数时,它可以正常编译。虽然当我使用任何向量数量显式调用函数VectorUnit()时,都声称存在“冲突类型”错误。
GRAV.c:463:8: error: conflicting types for ‘VectorUnit’
Vector VectorUnit(Vector a)
^
GRAV.c:341:3: note: previous implicit declaration of ‘VectorUnit’ was here
VectorUnit(bodies[j].position);
VectorUnit(bodies [j] .position);之类的函数调用有什么问题?
如前所述,使用我函数的内部函数可以完美地进行编译。
最佳答案
您在调用函数时未先声明它们。从C99开始,这是非法的。在C89中,它意味着隐式声明该函数为返回int
。
您需要在调用函数之前为其提供原型,例如有一个带有以下内容的头文件:
Vector VectorUnit(Vector a);
或者如果该函数仅出现在一个
.c
文件中,则在文件顶部附近声明:static Vector VectorUnit(Vector a);
或以不同的顺序放置函数,以使
VectorUnit
的主体位于任何调用它的函数之前。