gpt4 book ai didi

c - 取消引用指向不完整类型的指针

转载 作者:行者123 更新时间:2023-11-30 14:20:19 25 4
gpt4 key购买 nike

假设源文件中有两个结构:

struct B {
int x;
};

struct A {
beta y;
};

在等效的头文件中,我们有这些:

typedef B* beta;
typedef A* alpha;

此外,这些函数原型(prototype)是在头文件中定义的:

printAplha(alpha);
compare(const beta, const beta);

在主文件中,我包含了特定的头文件,代码如下所示:

alpha one, two;
printAlpha(one);
printAlpha(two);
//everything works fine up to here
compare(one->y, two->y);

在我得到的代码的最后一行

main.c:37:20: error: dereferencing pointer to incomplete type
main.c:37:33: error: dereferencing pointer to incomplete type

我知道我可以使用包装函数进行比较,其参数为 alpha 类型(因为比较函数的参数无法更改 - 它是递归的),但我想看看是否还有其他解决方案,以及为什么会发生这种情况。

注意:结构体定义已写入源文件中,用于创建不透明数据类型。

最佳答案

您尝试使用 typedef 为 struct A 和 struct B 声明不透明数据类型,但同时尝试访问使用这种不透明类型的字段。

您只能执行上述其中一项操作,不能同时执行两项操作。

解决方案是公开完整的结构定义或提供有助于访问特定字段的辅助方法。辅助方法的实现将再次需要访问完整的结构定义。

关于c - 取消引用指向不完整类型的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15561242/

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