我似乎无法让这个递归函数正确编译,我不知道为什么。
代码如下:

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) {

要解决此问题,您可以:
  • 在第 96 行之前的某处放置一个显式声明: void point_forward(mem_ptr m); 这将告诉编译器在第 96 行看到它时如何处理 point_forward(),即使它还没有看到函数实现。
  • 或者,在第 96 行上方定义整个函数(将函数定义从第 134 行向前移动到第 96 行上方)。

  • 这是一点点 more about declaring functions

    一般来说,对于风格,我要么:
  • 如果您不想在任何其他 C 文件中使用 point_forward(),请完整定义它:
    static void point_forward(mem_ptr m) { ..function body goes here.. }
    在源文件的顶部。
  • 如果你想在其他C文件中使用point_forward(),放一个前置声明:
    void point_forward(mem_ptr m);
    

    在其他文件要包含的头文件中。
  • 关于c - 注意 : previous implicit declaration of ‘point_forward’ was here,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16182115/

    10-13 00:25