目录
一、目的+问题+解决方法:
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一定要注意