gpt4 book ai didi

c - C中的头文件递归

转载 作者:行者123 更新时间:2023-12-05 01:22:56 25 4
gpt4 key购买 nike

我有这种情况:

A.hB.h

A.h 中:

typedef struct TypeA TypeA_t;
struct TypeA {
...
TypeA_t *a;
void (*doSomething)(TypeB_t *);
};

B.h 中:

typedef struct TypeB TypeB_t;
struct TypeB {
...
TypeB_t *b;
TypeA_t something;
};

在每个文件中包含头文件的正确方法是什么?

如果我在 B.h 中包含 A.h 并在 A.h 中包含 B.h 我得到:

错误:A.h 中的未知类型名称“TypeB_t”

错误:B.h 中的未知类型名称“TypeA_t”

我在这里发现了一个类似的问题,但它对我的情况不起作用。

最佳答案

您定义代码的方式,TypeA 可以使用对TypeB 的前向引用,但是TypeB 需要完整声明TypeA 进行编译。

换句话说,你需要做两件事。首先在类定义之前在 a.h 中定义 TypeB(因为指针可以使用部分定义):

//a.h
typedef struct TypeB TypeB_t;

typedef struct TypeA TypeA_t;
struct TypeA {
...
TypeA_t *a;
void (*doSomething)(TypeB_t*);
};

然后包含 b.h 中的 a.h 以获取您的类的声明(因为您使用完整的 TypeA 类作为字段类型) :

// b.h
#include "a.h"

typedef struct TypeB TypeB_t;
struct TypeB {
...
TypeB_t *b;
TypeA_t something;
};

关于c - C中的头文件递归,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73223800/

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