gpt4 book ai didi

c - 前向声明抛出重定义错误

转载 作者:太空宇宙 更新时间:2023-11-04 04:40:40 26 4
gpt4 key购买 nike

我有两个 .h 文件和一个 .c 文件,如下所示

啊.h

typedef struct mode_info_t_ mode_info_t;

struct common {
int create;
mode_info_t *mode_info;
};

b.h

typedef struct mode_info_t_ {
int primary;
int secondary;
} mode_info_t;

主.c

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

-----

编译 .c 时会抛出以下错误 -

b.h:17: 错误:typedef 'mode_info_t' 的重新定义
a.h:50: 错误:'mode_info_t' 的先前声明在这里

专家这里有什么问题吗?

最佳答案

把 b.h 改成这样:

struct mode_info_t_ {
int primary;
int secondary;
};

如果你需要 b.h 中的 typedef,让 b.h 包含 a.h。如果你不想让 b.h 包含 a.h 但仍然需要在两者中使用 typedef,那么将 typedef 从 a.h 中取出并放入 c.h,并让 a.h 和 b.h 都包含 c.h。

实际上,我之前已经这样做过,我将所有前向声明放在一个单独的 header 中,只是为了避免在不完全合适的情况下需要各种 header 相互包含。

关于c - 前向声明抛出重定义错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26955590/

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