gpt4 book ai didi

c - 转发 "Typedefing"一个结构体

转载 作者:行者123 更新时间:2023-11-30 15:10:46 28 4
gpt4 key购买 nike

我的包含文件有一个小问题,我已经对我的问题做了一个简化的模型。假设我正在编译一些需要名为

的头文件的源代码
header.h

里面有:

#ifndef HEADER_INCLUDED
#define HEADER_INCLUDED

#include element.h
typedef struct {
Element *list;
} Thing;

#endif

然后我有另一个头文件定义该元素并且还需要 header.h。

element.h

#ifndef ELEMENT_INCLUDED
#define ELEMENT_INCLUDED

typedef struct Element;

#include header.h
void * func(Thing *myThing);

#endif

然后我遇到了一个问题,因为 element.h 无法知道 Thing 类型是什么;我们尚未在 header.h 中达到该定义,因为我们需要包含 element.h。

我想我也许可以解决我的问题,在 element.h 中以及 void * func 原型(prototype)之前“前向定义”一个 Thing 类型

typedef struct thing Thing;

然后这只会产生另一个问题,编译器会提示 Thing 存在类型冲突。

如何摆脱困境?

最佳答案

您的主要问题是两者之间存在循环依赖关系,但您正在使用保护宏。这些文件几乎就像通过复制粘贴一样包含在内 - 其中一个文件必须在另一个文件之前包含,因此不能具有这种循环依赖关系。重新思考你的结构。

在 1 个位置声明/定义基本数据类型,然后使用该类型声明/定义基本数据类型,最后声明/定义将这些类型作为参数/返回值的函数。

此外,typedef struct Element; 是无效的 typedef。

关于c - 转发 "Typedefing"一个结构体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36003659/

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