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 4

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", как и ожидалось.