C错误:“指针指向不完整类型的算术运算”



如果我有定义:

typedef struct y_t *Y;

typedef struct x_t *X;    
struct x_t {
    Y *b;
    Y a;
    int size;
};

b是尺寸为sizeY类型的阵列)

我有

int func(X x) {    
    int diff = x->a - x->b[0];   // error here
    return diff;
}

假设ab数组中的一个元素,func需要返回ab数组中的索引。

但是我得到了一个错误arithmetic on pointer to an incomplete type(我使用的是eclipse)。

我认为它有问题,因为它不知道数组的维度。。。那么我该如何修复func呢?

消息。。。

不完全型指针的算法

可能是因为CCD_ 11的声明在编译单元中此时不可见。Y的typedef用作这种结构的前向声明,但如果没有完整声明,struct y_t是一个不完整的类型。

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

出现该错误的原因是,您试图对不是数组的变量进行索引。当你取消引用一个数组时,就像你在这里所做的那样:

Y *b

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

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

相关内容

最新更新