关键在于:
'point_forward' 的先前隐式声明在这里
在第 96 行,您有:
point_forward(m); // where m is a mem_ptr;
由于编译器还没有看到 的函数声明point_forward(m)
,它“隐式定义”(即假设)一个返回 int 的函数:
int point_forward(mem_ptr m);
这与后面的定义冲突:
void point_forward (mem_ptr m) {
要解决此问题,您可以:
在第 96 行之前的某处放置一个显式声明:void point_forward(mem_ptr m);
这将告诉编译器在第 96 行看到它时如何处理point_forward()
,即使它还没有看到函数实现。
或者,在第 96 行之上定义整个函数(将函数定义从第 134 行移至第 96 行之上)。
这里有更多关于声明函数的内容。
一般来说,对于风格,我会:
如果您不想point_forward()
在任何其他 C 文件中使用,请完整定义它:
static void point_forward(mem_ptr m) { ..function body goes here.. }
在源文件的顶部。
如果要point_forward()
在其他 C 文件中使用,请提出前向声明:
void point_forward(mem_ptr m);
在要包含的其他文件的头文件中。