如果我有定义:
typedef struct y_t *Y;
和
typedef struct x_t *X;
struct x_t {
Y *b;
Y a;
int size;
};
(b
是一个大小为Y
的{{1}}类型的数组。
我有
size
我们假设int func(X x) {
int diff = x->a - x->b[0]; // error here
return diff;
}
是a
数组中的元素,而b
需要在{{1}中返回func
的索引数组。
但我收到错误a
(我使用的是eclipse)。
我认为它有问题,因为它不知道数组的维度......那么如何修复b
?
答案 0 :(得分:1)
消息......
指向不完整类型的指针算法
...可能是因为struct y_t
的声明在编译单元的那一点上不可见。 Y
的typedef作为此类结构的前向声明提供双重职责,但如果没有完整声明,struct y_t
是不完整的类型。
x->a
和x->b[0]
都是Y
s,a.k.a。struct y_t *
。它们之间的差异是根据指向结构的大小来定义的,但它的大小是未知的,因为它是一个不完整的类型。您需要提供struct y_t
的声明,以表明您正在做的工作。
答案 1 :(得分:0)
您收到该错误的原因是您尝试索引不是数组的变量。当您取消引用数组时,正如您在此处所做的那样:
Y *b
您已经在结构定义中访问数组的第0个索引。所以只需将您的行更改为:
int diff = x->a - x->b;