关于C++与C语言在struct上的区别
最近在编写国标消息时遇到关于CPP和C在struct上的区别,记录一下。感谢师兄鼓励帮忙!
问题描述
typedef struct IARData {
struct PathPlanningPoint *currentPos /* OPTIONAL */;
struct PathPlanning *path_Planning /* OPTIONAL */;
DriveBehavior_t *currentBehavior /* OPTIONAL */;
struct reqs {
A_SEQUENCE_OF(struct DriveRequest) list;
/* Context for parsing across buffer boundaries */
asn_struct_ctx_t _asn_ctx;
} *reqs;
/*
* This type is extensible,
* possible extensions are below.
*/
/* Context for parsing across buffer boundaries */
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 分配地址空间,我们需要使用作用域运算符,写成如下形式:
// cpp 解决方案
iAD->reqs = (struct IARData::reqs*)malloc(sizeof(struct IARData::reqs);
或者我们可以使用c文件编写:
c 解决方案
iAD->reqs = (struct reqs*)malloc(sizeof(struct reqs));