Использовать массив в пользовательском TYPE в QBasic - PullRequest
0 голосов
/ 21 ноября 2018

Я пытаюсь научить 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

Компилятор сообщает, что это недопустимый синтаксис.

Тогда, как сохранить массив в определенном ТИПЕ?И как им пользоваться?

Ответы [ 2 ]

0 голосов
/ 27 января 2019

Код, который вам нужен, выглядит примерно так:

Хотя вы НЕ МОЖЕТЕ делать это в QB1.1, QB4.5 или QB64, вы МОЖЕТЕ делать это в надмножествах диалекта BASIC, известного как 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
0 голосов
/ 22 ноября 2018

Здесь есть две проблемы.В QB64 вы просто не можете помещать массивы внутри пользовательских типов.Согласно статье вики QB64 об определениях TYPE :

Определения TYPE не могут содержать переменные Array!Массивы могут быть DIMensioned как определение TYPE.

Кроме того, ваш dataArray (объявленный dataArray AS STRING * 4) вообще не объявляет массив, а объявляет строку из 4 символов.Вот почему вы получаете синтаксическую ошибку при попытке доступа к элементам dataArray с использованием синтаксиса массива.Вы можете объявить массив , состоящий из пользовательского типа, например:

TYPE TestType
    dataElement AS _BYTE
END TYPE

DIM CustomType(4) AS TestType

CustomType(1).dataElement = 3

Это объявляет массив из 4 элементов TYPE TestType, каждый элемент содержит переменную TYPE _BYTE.Это как можно ближе к тому, что вы пытаетесь сделать.Удачи!

...