C错误:`指向不完整类型的指针'

时间:2015-11-18 21:36:12

标签: c eclipse pointers struct typedef

如果我有定义:

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

2 个答案:

答案 0 :(得分:1)

消息......

  

指向不完整类型的指针算法

...可能是因为struct y_t的声明在编译单元的那一点上不可见。 Y的typedef作为此类结构的前向声明提供双重职责,但如果没有完整声明,struct y_t是不完整的类型。

x->ax->b[0]都是Y s,a.k.a。struct y_t *。它们之间的差异是根据指向结构的大小来定义的,但它的大小是未知的,因为它是一个不完整的类型。您需要提供struct y_t的声明,以表明您正在做的工作。

答案 1 :(得分:0)

您收到该错误的原因是您尝试索引不是数组的变量。当您取消引用数组时,正如您在此处所做的那样:

Y *b

您已经在结构定义中访问数组的第0个索引。所以只需将您的行更改为:

int diff = x->a - x->b;