我使用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的主体位于任何调用它的函数之前。

09-30 11:47