【发布时间】:2020-04-30 14:33:26
【问题描述】:
我对 C 中的前向声明有疑问。
代码
typedef struct yhash_s t_yhash;// forward declaration
struct yhash_s {
size_t size_h;
t_yhash (*yhash)[];// pointer to array of structures
};
使用 gcc 编译代码后,它会报错:
错误:数组类型有不完整的元素类型‘t_yhash’ {aka ‘struct yhash_s’}
我确实知道t_yhash(尚不知道)并且无法计算数组的大小,但我询问的是指向一个未知大小的数组的指针,恕我直言,这应该是完全可以解决的。
如何修复该前向声明和结构本身?
【问题讨论】:
-
是你的括号导致了问题。你实际上的意思是
t_yhash **yhash; -
如果你有一个数组,你需要知道数组中每个元素的大小。你不能有一个未知大小的结构数组,也不能声明指向它的指针,因为你不知道它指向的大小。
-
@KamilCuk 你实际上可以ideone.com/3FKCrJ。
-
@EugeneSh。您的示例使用 int 作为函数数组的返回类型,因此它可以工作。但这不是 OP 的意图,
int也具有已知类型,因此即使 是 OP 的意图也不适用。 -
@AhmedMasud 我的回复完全是对 KamilCuks 的评论(现已删除..)。