我似乎无法让这个递归函数正确编译,我不知道为什么。
代码如下:
void point_forward (mem_ptr m) {
mem_ptr temp;
temp = m->next;
if (temp->next != NULL) point_forward(temp);
m->next = temp->next;
}
我的编译器返回这个:
最佳答案
关键在这:
在第 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) {
要解决此问题,您可以:
void point_forward(mem_ptr m);
这将告诉编译器在第 96 行看到它时如何处理 point_forward()
,即使它还没有看到函数实现。 这是一点点 more about declaring functions 。
一般来说,对于风格,我要么:
point_forward()
,请完整定义它:static void point_forward(mem_ptr m) { ..function body goes here.. }
在源文件的顶部。
point_forward()
,放一个前置声明:void point_forward(mem_ptr m);
在其他文件要包含的头文件中。
关于c - 注意 : previous implicit declaration of ‘point_forward’ was here,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16182115/