#arrays #vb6 #parameter-passing
#массивы #vb6 #передача параметров
Вопрос:
Это может показаться глупым вопросом, но я собираюсь вытащить hear из.
У меня есть подраздел, в котором я хочу проанализировать массив и присвоить его модулю класса «Object».
Как мне это сделать.
Что у меня действительно не работает, так это:
Private matrix(9,9) As Integer
'The Setter Sub
Public Sub SetMatrixArray(arrValToSet() as Integer)
matrix = arrValToSet
End Sub
'In the caller module / class module I have the following code to parse the array.
Dim theArray(9,9) As Integer
Dim customObj as CustomObject
customObj.SetMatrixArray(theArray)
Я получаю следующее сообщение об ошибке:
Несоответствие типов: ожидаемый массив или пользовательский тип.
Комментарии:
1. Ответ Dabblernl должен сработать. И если у вас возникнут дополнительные проблемы, это кажется довольно хорошим ресурсом для массивов (речь идет о VBA, но это достаточно близко, чтобы быть полезным).
2. @ho1 Я не согласен, но его синтаксис для вызова SetMatrixArray неверен. Я смотрю на это . Я ошибаюсь?
3. @Jay: Нет, я думаю, вы совершенно правы. Я слишком привык к VB. Net итак, я даже не заметил эти дополнительные круглые скобки до сих пор. Я думаю, что необходима комбинация ваших ответов и ответов Dabblernl.
Ответ №1:
Это работает:
'In the caller module / class module I have the following code to parse the array.'
Dim theArray(9,9) As Integer
Dim customObj as CustomObject
customObj.SetMatrixArray theArray
‘Класс’
Private matrix() As Integer
'The Setter Sub '
Public Sub SetMatrixArray(arrValToSet() as Integer)
matrix = arrValToSet
End Sub
Поэтому удалите определение размеров массива matrix в вашем классе. Вы всегда можете реализовать проверку ошибок, если размеры должны быть ровно 9.
РЕДАКТИРОВАТЬ: я удалил скобки вокруг вызова процедуры, не задумываясь во время тестирования, это может повлиять на ответ.
Комментарии:
1. Да, это называется «объявление динамического массива».
2. VB не позволяет вам повторно назначать массив там, где вы уже задали ему размер. Приведенное выше утверждение не работает.
3. Позвольте мне перефразировать. Это действительно работает, если theArray() не присвоено значение theArray(9,9). Я изменил ответ. Хорошая работа. Сегодня узнал кое-что новое!
Ответ №2:
Я думаю, вам нужно передать массив как вариант для многомерных массивов
Public Sub SetMatrixArray(arrValToSet as Variant)
matrix = arrValToSet
End Sub
Ознакомьтесь с этой статьей.
Ответ №3:
При вызове customObj.SetMatrixArray()
попробуйте либо:
Удаление скобок вокруг параметра процедуры:
customObj.SetMatrixArray theArray
— или —
Предваряющий ваш вызов с Call
:
Call customObj.SetMatrixArray(theArray)
Комментарии:
1. 1 В VB6 вы можете столкнуться со странными случаями, когда добавление дополнительных круглых скобок превращает ваш аргумент в выражение