如果我有定义:
typedef struct y_t *Y;
和
typedef struct x_t *X;
struct x_t {
Y *b;
Y a;
int size;
};
(b
是尺寸为size
的Y
类型的阵列)
我有
int func(X x) {
int diff = x->a - x->b[0]; // error here
return diff;
}
假设a
是b
数组中的一个元素,func
需要返回a
在b
数组中的索引。
但是我得到了一个错误arithmetic on pointer to an incomplete type
(我使用的是eclipse)。
我认为它有问题,因为它不知道数组的维度。。。那么我该如何修复func
呢?
消息。。。
不完全型指针的算法
可能是因为CCD_ 11的声明在编译单元中此时不可见。Y
的typedef用作这种结构的前向声明,但如果没有完整声明,struct y_t
是一个不完整的类型。
x->a
和x->b[0]
都是Y
s,也称为struct y_t *
。它们之间的差异是根据指向结构的大小来定义的,但其大小是未知的,因为它是一个不完整的类型。您需要提供struct y_t
的声明来说明您正在做的工作。
出现该错误的原因是,您试图对不是数组的变量进行索引。当你取消引用一个数组时,就像你在这里所做的那样:
Y *b
您已经在访问结构定义中数组的第0个索引。所以只需将您的线路更改为:
int diff = x->a - x->b;