1
一個目錄包含下列文件:使用結構類型定義在多個.C&.h文件
- 「車」 的文件:
一個。 car.h:
#ifndef __CAR_H__
#define __CAR_H__
typedef struct car car_t;
...
(some functions declarations)
...
#endif /* __CAR_H__ */
b。 car.c
#include <stdio.h>
#include <stdlib.h>
#include "car.h"
typedef struct car_node
{
void *data;
struct car_node *next;
struct car_node *prev;
} car_node_t;
struct car
{
car_node_t head;
car_node_t tail;
};
...
(some functions implementations)
...
c。 car_main.c
#include <stdio.h>
#include "car.h"
int main()
{
...
(some tests)
...
}
2. 「車」 的文件:
一個。 vehicles.h
#ifndef __VEHICLES_H__
#define __VEHICLES_H__
typedef struct vehicles vehicles_t;
...
(some functions declarations)
...
#endif /* ifndef __VEHICLES_H__ */
b。車輛。c
#include <stdio.h>
#include "car.h"
#include "vehicles.h"
struct vehicles
{
car_t carlist;
void *data;
};
c。 vehicles_main.c
#include <stdio.h>
#include "car.h"
#include "vehicles.h"
int main()
{
...
(some tests)
...
}
編譯時使用一個makefile如下,一切都很正常: car.c,car_main.c。
但是,當我編譯生成文件下列文件:car.c,vehicles.c,vehicles_main.c,我得到以下錯誤:
vehicles.c: error: field ‘carlist’ has incomplete type
我的問題是:爲什麼編譯器不如果car.h包含在vehicles.c中,則識別car.h中的typedef car_t?