【发布时间】:2011-12-17 15:54:20
【问题描述】:
我在 C 语言中有一个关于包含头文件的奇怪问题。
main.c
#include <stdio.h>
#include <stdlib.h>
#include "location.h"
int waste_new_line();
int main()
{
location *crossroads = malloc(sizeof(*crossroads));
...
location.h
typedef struct Location_Struct location;
location.c
typedef struct Location_Struct {
int ID;
char *name;
char *description;
} location;
int setup_location(location* l, char* name)
{
...
现在这不起作用,因为
location *crossroads = malloc(sizeof(*crossroads));
正在抛出错误:取消引用指向不完整类型的指针意味着它可以看到 location.h 的内容,但它似乎不知道 location.c...
我环顾四周,我看到的所有教程都说链接器会将两个文件链接在一起。
编辑:
我已更改代码以在 location.c 中包含一个初始化程序,如下所示:
main.c
...
#include "location.h"
int waste_new_line();
int main()
{
location *crossroads = initialize_location();
....
location.h
typedef struct Location_Struct location;
location* initialize_location();
location.c
...
typedef struct Location_Struct {
int ID;
char *name;
char *description;
} location;
location* initialize_location(location* l)
{
return malloc(sizeof(location));
}
...
这仍然抛出相同的错误,但只有当我尝试使用以下方式访问十字路口的成员时:
crossroads->description
这将引发对不完整类型的尊重错误。
编辑 2:现在我决定将结构定义放在头文件中...
【问题讨论】:
-
位置 *crossroads = malloc(sizeof(location));
-
文件链接在一起,但不是由编译器链接在一起(或者至少不是由编译器的一部分而不是与您的 C 源代码相关的部分)。哪些教程说明了其他内容?
-
@Krister:不,应该首选 OP 的方法。
-
@delnan:对不起,我的意思是链接器