C/C++变量做结构体数组长度

本文介绍如何在MFC框架下为游戏正确地定义和使用动态数组。针对创建动态猴子数组时出现的编译错误,文章详细解释了错误原因,并提供了正确的实现方式。

先看一下C/C++定义可变数组的方法:[C/C++变量做数组长度]

(https://blog.csdn.net/lyq_12/article/details/81773601)
用MFC做抓猴子的小游戏,用同样的方法在头文件中定义结构体数组报错。

protected: // create from serialization only
	CCatchMonkeyView();
	DECLARE_DYNCREATE(CCatchMonkeyView)

// Attributes
public:
	CCatchMonkeyDoc* GetDocument();
	int sum;	//猴子总数
	int remain;	//剩余猴子数
	int height;
	int width;

	struct MONKEY{
		float x;
		float y;
		bool isCatched;
	};

	MONKEY* monkey;
	monkey = new MONKEY[sum];	//通过指针动态申请空间

报错信息

error C2327: 'CCatchMonkeyView::sum' : member from enclosing class is not a type name, static, or enumerator
error C2258: illegal pure syntax, must be '= 0'

问题出在不能在头文件中给数组分配空间,申请空间的操作应该在构造函数初始化时候完成。

正确姿势
在头文件中声明,构造函数中分配空间。

public:
	CCatchMonkeyDoc* GetDocument();
	int sum;	//猴子总数
	int remain;	//剩余猴子数
	int height;
	int width;

	struct MONKEY{
		float x;
		float y;
		bool isCatched;
	};

	MONKEY* monkey;


CCatchMonkeyView::CCatchMonkeyView()
{
	// TODO: add construction code here
	width=height=0;
	sum=10;

	monkey = new MONKEY[sum];	//通过指针动态申请空间

	remain=0;
	for(int i=0;i<sum;i++){
		monkey[i].x=rand()%800+1;
		monkey[i].y=rand()%450+1;
		monkey[i].isCatched=false;
	}
	srand((unsigned)time(NULL));
}
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值