一.结构体定义
结构体,Solidity中的自定义类型。我们可以使用Solidity的关键字struct
来进行自定义。结构体内可以包含字符串,整型等基本数据类型,以及数组,映射,结构体等复杂类型。数组,映射,结构体也支持自定义的结构体。我们来看一个自定义结构体的定义:
pragma solidity ^0.4.4; pragma solidity ^0.4.0; contract SimpleStruct{ //学生 struct Student{ string name; int num; } //班级 struct Class{ string clsName; //学生的列表 Student[] students; mapping(string=>Student)index; } }
在上面的代码中,我们定义了一个简单的结构体Student,它包含一些基本的数据类型。另外我们还定义了一个稍微复杂一点的结构体Class,它包含了其它结构体Student,以及数组,映射等类型。
数组类型的students和映射类型的index的声明中还使用了结构体。
结构体定义的限制
我们不能在结构中定义一个自己作为类型,这样限制原因是,自定义类型的大小不允许是无限的。我们来看看下述的代码:
pragma solidity ^0.4.0; contract NoMemberOfOwn{ struct A{ //定义包含自己的会报错 //Error: Recursive struct definition. //A a; mapping(int=>A) mappingMemberOfOwn; A[] arrayMemberOfOwn; } }
在上面的代码中,我们尝试在A类型中定义一个A a;,将会报错Error: Recursive struct definition.。虽然如此,但我们仍然能在类型内用数组,映射来引用当前定义的类型,如变量mappingMemberOfOwn,arrayMemberOfOwn所示。
二.初始化
下面我们来说说结构体的初始化。
1.直接初始化