【发布时间】:2016-07-04 00:28:07
【问题描述】:
我正在学习如何创建头文件和分离实现,同时也开始学习如何创建链表。我创建了linked_list.h、linked_list.c 和main.c 文件。在main.c 中,尝试创建我键入定义的结构时出现错误,除非我将其创建为指针,否则它可以工作。我不明白这是为什么,有人可以解释一下吗?
linked_list.h:
#ifndef LINKED_LIST_H_
#define LINKED_LIST_H_
typedef struct ListNode_ ListNode;
#endif // LINKED_LIST_H_
linked_list.c:
#include <stdio.h>
#include <stdlib.h>
#include "linked_list.h"
struct ListNode_ {
int data;
ListNode *next;
};
main.c:
#include <stdio.h>
#include <stdlib.h>
#include "linked_list.h"
int main() {
ListNode node1; // why can't I do this?
ListNode *node2; // but this works
}
【问题讨论】:
-
由于
main.c不包含struct ListNode_的定义,因此您无法在该翻译单元中创建该类型的对象。 -
将您的
ListNode_结构定义移动到.h文件。请参阅this answer 以了解有关应将哪些信息存储在头文件中的更多信息。 -
@jake 通常你会将在linkedlist中运行的函数放在linkedlist.c中,例如
add、remove等。在linkedlist.h中你放置结构声明和函数原型声明. -
“翻译单元”只是一个源文件加上源文件包含的头文件和其他文件的内容。当您要求它编译单个源文件时,它是编译器考虑的完整代码集。
标签: c pointers struct header typedef