C:不完整的返回类型

时间:2014-11-07 13:50:14

标签: c struct declaration

我尝试在C中实现链表,并从这个简单的代码开始:

#include <stdio.h>

struct int_node;
struct int_list;
struct int_list create_list();

int main() {

    struct int_list list = create_list();
    return 0;
}

struct int_node {
    int value;
    struct int_node * next;
};

struct int_list {
    struct int_node * first;
};

struct int_list create_list() {
    /* Creates an empty list, first node=null */
    struct int_list list;
    list.first = NULL;
    return list;
};

建筑时我遇到两个错误:

  1. 使用不完整的返回类型'struct int_list'
  2. 调用'create_list'
  3. 变量具有不完整类型'struct int_list'
  4. 我寻找答案,我能找到的就是在使用它之前我需要声明结构和函数,我做了。

    我尝试的另一件事是将main()函数移动到最后,这解决了错误,但这是一个愚蠢的解决方法,我想找出真正的解决方案。

    任何帮助?

2 个答案:

答案 0 :(得分:6)

结构的定义也应放在main()之前。也就是说,你的愚蠢修复实际上是正确的修复。

答案 1 :(得分:1)

实际上,在使用它们之前,你需要定义结构,否则编译器在主方法中看到它时如何知道struct int_node是什么。正如Bill Lynch所说,你的简单修复实际上只是正确的方法。

如果您有兴趣了解更多内容,您应该查看程序从源代码到C中的可执行文件的确切方式。 Here是一个有趣且不长的网页。