gpt4 book ai didi

c - 在多个 .c 和 .h 文件中使用 struct typedef

转载 作者:太空宇宙 更新时间:2023-11-04 02:38:15 29 4
gpt4 key购买 nike

目录包含以下文件:

  1. “汽车”文件:

一个。车.h:

#ifndef __CAR_H__
#define __CAR_H__

typedef struct car car_t;
...
(some functions declarations)
...
#endif /* __CAR_H__ */

汽车.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)
...

car_main.c

#include <stdio.h>
#include "car.h"

int main()
{
...
(some tests)
...
}

2。 “车辆”文件:

一个。车辆.h

#ifndef __VEHICLES_H__
#define __VEHICLES_H__

typedef struct vehicles vehicles_t;

...
(some functions declarations)
...

#endif /* ifndef __VEHICLES_H__ */

车辆.c

#include <stdio.h>
#include "car.h"
#include "vehicles.h"

struct vehicles
{
car_t carlist;
void *data;
};

vehicles_main.c

#include <stdio.h>
#include "car.h"
#include "vehicles.h"

int main()
{
...
(some tests)
...
}

使用 makefile 编译以下内容时,一切正常:car.c, car_main.c.

但是,当我使用 makefile 编译以下文件时:car.c、vehicles.c、vehicles_main.c,出现以下错误:

vehicles.c: error: field ‘carlist’ has incomplete type

我的问题是:如果 car.h 包含在 vehicles.c 中,为什么编译器无法识别在 car.h 中找到的 typedef car_t?

最佳答案

问题是在 vehicles.c 中,编译器需要知道 car_t 实际上 是什么,而您只提供了它应该被称为car_t 实际上是什么car.c 中定义。要解决此问题,您要么必须将 carlist 设为指针(因为编译器不需要完整的类型),要么必须将结构定义移动到 .h 文件:

car.h:

typedef struct car_node
{
void *data;
struct car_node *next;
struct car_node *prev;
} car_node_t;

typedef struct car {
car_node_t head;
car_node_t tail;
} car_t;

关于c - 在多个 .c 和 .h 文件中使用 struct typedef,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34636235/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com