关于C++与C语言在struct上的区别
??最近在编写国标消息时遇到关于CPP和C在struct上的区别,记录一下。感谢师兄鼓励帮忙!
问题描述
typedef struct IARData {
struct PathPlanningPoint *currentPos ;
struct PathPlanning *path_Planning ;
DriveBehavior_t *currentBehavior ;
struct reqs {
A_SEQUENCE_OF(struct DriveRequest) list;
asn_struct_ctx_t _asn_ctx;
} *reqs;
asn_struct_ctx_t _asn_ctx;
} IARData_t;
??在cpp文件中想要给reqs申请地址空间时,如果使用:
iAD->reqs = (struct reqs*)malloc(sizeof(struct reqs));
则VsCode会报出不允许使用不完整的类型 的错误。
解决方案
??出错的原因是编译器找不到struct reqs的定义,cpp将struct reqs视为在struct IARData的作用域内部定义,不对外直接显示。因此在cpp想要给 iAD->reqs 分配地址空间,我们需要使用作用域运算符,写成如下形式:
iAD->reqs = (struct IARData::reqs*)malloc(sizeof(struct IARData::reqs);
?? 或者我们可以使用c文件编写:
c 解决方案
iAD->reqs = (struct reqs*)malloc(sizeof(struct reqs));
|