我正在尝试学习QBasic在Amstrad Alt-286上编程。在我的一个程序中,我使用了几个用户定义的类型,有时是TYPE数组。在其中一些中,我想声明一个数组,如下所示:
TYPE TestType
dataArray AS STRING * 4 'Since "dataArray AS _BYTE * 4" doesn't work (wrong syntax compiler says).
END TYPE
然后我这样声明我的类型:
DIM customType(2) AS TestType
只要我想在我的类型的dataArray中这样写:
customType(1).dataArray(2) = 3
编译器告诉我这是一个无效的语法。
那么,如何将数组存储在定义的TYPE中呢?如何使用它?
这里有两个问题。在QB64中,您根本无法将数组放入用户定义的类型中。根据QB64Wiki关于TYPE定义的文章:
TYPE定义不能包含数组变量!数组可以作为TYPE定义进行DIMension。
除此之外,dataArray(声明为dataArray AS STRING * 4
(根本不声明数组,而是声明一个4个字符的字符串。这就是为什么当您尝试使用数组语法访问dataArray的元素时会出现语法错误。您可以声明一个由自定义类型的组成的数组,如下所示:
TYPE TestType
dataElement AS _BYTE
END TYPE
DIM CustomType(4) AS TestType
CustomType(1).dataElement = 3
这声明了一个TYPE TestType的4元素数组,每个元素都包含一个TYPE _BYTE变量。这几乎是你所能做的。祝你好运!
您想要的代码如下:
虽然你不能在QB1.1、QB4.5或QB64中这样做,但你可以在被称为QB7.1(BC7/PDS(和VBDOS(v1.00(的BASIC方言超集中这样做:
TYPE testtype
dataArray(4) AS INTEGER
END TYPE
DIM customtype(10) AS testtype
customtype(1).dataArray(2) = 3
否则,您可以压缩变量如下:
TYPE testtype
dataArray AS STRING * 8
END TYPE
DIM customtype(10) AS testtype
A = 10: B = 12: C = 14: D = 16
' compress variables into structure
element1$ = MKI$(A) + MKI$(B) + MKI$(C) + MKI$(D)
customtype(1).dataArray = element1$ ' store
' extract variables from structure
element2$ = customtype(1).dataArray ' get
E = CVI(MID$(element2$, 1, 2))
F = CVI(MID$(element2$, 3, 2))
G = CVI(MID$(element2$, 5, 2))
H = CVI(MID$(element2$, 7, 2))
PRINT E, F, G, H