在 QBasic 中的用户定义类型中使用数组

Use an array in a user-defined TYPE in QBasic

我正在尝试学习 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 中,您根本无法将数组放入用户定义的类型中。根据 QB64 Wiki 的 article on TYPE definitions:

TYPE definitions cannot contain Array variables! Arrays can be DIMensioned as a TYPE definition.

除此之外,您的 dataArray(声明为 dataArray AS STRING * 4)根本没有声明数组,而是声明了一个 4 字符的字符串。这就是当您尝试使用数组语法访问 dataArray 的元素时出现语法错误的原因。您可以声明一个 包含自定义类型 的数组,如下所示:

TYPE TestType
    dataElement AS _BYTE
END TYPE

DIM CustomType(4) AS TestType

CustomType(1).dataElement = 3

这声明了一个类型为 TestType 的 4 元素数组,每个元素包含一个类型为 _BYTE 的变量。这与您尝试做的事情尽可能接近。祝你好运!

你想要的代码是这样的:

虽然您不能在 QB1.1、QB4.5 或 QB64 中执行此操作,但您可以在称为 QB7.1(BC7/PDS) 和 VBDOS(v1. 00):

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