C语言结构体未指定长度数组指针报不完整类型错误怎么解决
问题原因
编译报错的核心原因是结构体B中stack成员的类型定义不合理:A(*stack)[]是指向未指定长度A数组的指针,属于不完整类型。C语言做指针算术运算时需要明确指向对象的内存大小来计算步长,未指定长度的数组大小无法确定,因此test->stack + i的运算无法完成,编译器会抛出不完整类型错误。
解决方案
由于你无法修改rr函数的实现,仅需要调整结构体B中stack成员的类型,将数组指针修改为普通的A类型指针即可,修改后的结构体定义如下:
typedef struct { unsigned int count; A *stack; }B;
方案说明
- 修改后
stack是指向单个A类型对象的指针,指针运算的步长固定为sizeof(A),完全匹配rr函数中test->stack + i的操作逻辑,编译可正常通过。 - 该修改完全兼容
rr函数的原有逻辑,不需要改动rr函数的任何代码,malloc分配、循环赋值操作都可以正常执行。 - 后续你访问
stack中的元素时,也可以直接使用x.stack[i].x这类常规动态数组的写法,使用更加便捷。
内容的提问来源于stack exchange,提问作者uecke
相关产品推荐
相关产品推荐

