Visual basic 6.0: функция, возвращающая массив
Есть ли лучший способ, как создать функцию, возвращающую массив, чем:
function foo
Dim bar(1 to 2)as double
bar(1)=1
bar(2)=2
foo=bar
end function
И в коде:
arrayx=foo
Потому что, когда я объявляю Dim arrayx(1 to 2) as double
, он выдает ошибку "не могу назначить массив", когда я не объявляю переменную arrayx, кажется, что у него нет никаких проблем.
2 ответа:
Как предлагает Мэтт , Эта ошибка:
Ошибка компиляции: не удается назначить массиву
Связано с тем, что вы попытались присвоить возвращаемое значение
Foo()
фиксированному массиву, а не динамическому массиву. Вам просто нужно указать компилятору, что переменная, которую вы объявляете, является массивом, а не фактическим размером массива. Это позволит выяснить размер, исходя из размера массива, который возвращается.Кроме того, вы должны всегда указывайте тип возвращаемого значения для своих функций. Вы делаете это в VB, помещая предложение
As Type
в конце объявления функции. В этом случае требуется массив двойников, записанный какDouble()
.Итак, перепишите свой код так, чтобы он выглядел следующим образом, включая оба этих изменения:
Function Foo() As Double() ' note the specification of a return value Dim bar(1 To 2) As Double bar(1) = 1 bar(2) = 2 Foo = bar End Function Private Sub Command1_Click() Dim arrayx() As Double ' note the declaration of a DYNAMIC array arrayx = Foo() MsgBox arrayx(1) End Sub
Этот код отображает окно сообщения со значением "1", как и ожидалось.
Вы можете назначить только динамический массив . Попробуйте:
Dim arrayx() as Double