MFC声明结构体对象时候出现了问题:注意多看

47 篇文章 2 订阅
9 篇文章 0 订阅

目录

一、目的+问题+解决方法:

1、结构体创建对象时候,让我一直报错

二、参考:

1、C语言结构体初始化的四种方法

1、C++构造函数初始化列表

三、总结

1、一定要看好结构体


一、目的+问题+解决方法:

1、结构体创建对象时候,让我一直报错

①需要创建对象的结构体

// AS3脚本中的函数参数
struct FastFlashArg
{
	enum EType
	{
		eEmpty = 0,
		eString,
		eNumber,
		eBool,
	};
	EType type;
	union
	{
		const char* s;
		double n;
		bool b;
	};
	FastFlashArg() : type(eEmpty) {}
	FastFlashArg(const char* _s) : type(eString), s(_s) {}
	FastFlashArg(char _n) : type(eNumber), n((double)_n) {}
	FastFlashArg(unsigned char _n) : type(eNumber), n((double)_n) {}
	FastFlashArg(short _n) : type(eNumber), n((double)_n) {}
	FastFlashArg(unsigned short _n) : type(eNumber), n((double)_n) {}
	FastFlashArg(int _n) : type(eNumber), n((double)_n) {}
	FastFlashArg(unsigned int _n) : type(eNumber), n((double)_n) {}
	FastFlashArg(__int64 _n) : type(eNumber), n((double)_n) {}
	FastFlashArg(unsigned __int64 _n) : type(eNumber), n((double)_n) {}
	FastFlashArg(float _n) : type(eNumber), n((double)_n) {}
	FastFlashArg(double _n) : type(eNumber), n(_n) {}
	FastFlashArg(bool _b) : type(eBool), b(_b) {}
};

①成功:如果是这样创建的就会成功,但是我不想创建数组,我就想创建一个对象,但是发现一直会出现问题

	//测试2:成功:一次创建多个结构体,即创建一个数组
	//结果:创建一个名叫作argv0的数组,数组里面总共有4个FastFlashArg结构体的对象;
	//argv0[0]成员变量const char*=“ASD”其他都是默认值; argv0[1]成员变量n=1其他都是默认值; argv0[2]成员变量b=false其他都是默认值;
	//struct  FastFlashArg argv0[4]={"ASD",1,false};	
	//int a=0;

①失败:不允许使用{...}对类型的对象进行初始化

①失败:不允许使用{...}对类型的对象进行初始化

①成功:我以为我不会用结构体,然后我模仿了一个结构体创建对象,发现是成功的,其中不适用public,让他默认的private也是可以创建的

	③成功:自己创建结构体
	//struct MyFastFlashArg
	//{
	//	//public:
	//	const char* s;
	//	double n;
	//	bool b;
	//};
	//MyFastFlashArg argv0={"ASD",1,false};

①失败:以为是public问题:不允许使用{...}对类型的对象进行初始化,但是结果发现还是创建不了

 

①成功:创建1个FastFlashArg成员:之前创建对象时候的构造函数弄错了,和类创建对象一样的

需要仔细看构造函数,自己之前构造函数一直弄错了,小括号进行构造函数,大括号是数组里面创建对象时候进行初始化赋值

①然后我就想着,如何设置FastFlashArg数据成员的const char* 内容

a、方法一:失败:直接构造函数中赋值  FastFlashArg(const char* _s) 

b、方法二:失败:对象进行数据成员赋值

c、方法三:成功:对象进行数据成员赋值,一定要用到初始化列表

 

二、参考:

1、C语言结构体初始化的四种方法

https://blog.csdn.net/ericbar/article/details/79567108

①总结:good适合多看,知道了结构体的用法

 

1、C++构造函数初始化列表

http://c.biancheng.net/view/2223.html

①总结:good:适合多看,知道了初始化列表

 

三、总结

1、一定要看好结构体

①构造函数中:只有一个const char* _s的,并且const只能在初始化列表中进行赋值,后面就无法进行赋值了

FastFlashArg argv0("ASD");

②当我已经进行const char* _s初始化列表赋值后,再对其进行赋值就会出现错误的指针,但是其他的数据成员能够赋值的,其中const一定要注意

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值