关于C++与C语言在struct上的区别

关于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));
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值