Visual Basic 6.0: функция, возвращающая массив - PullRequest
5 голосов
/ 19 мая 2011

Есть ли лучший способ, как создать функцию, возвращающую массив, чем:

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 ]

13 голосов
/ 19 мая 2011

Как Мэтт предлагает , эта ошибка:

Ошибка компиляции: невозможно присвоить массиву

связано с тем, что вы пытались присвоить возвращаемое значение Foo() массиву fixed , а не динамическому массиву. Вам просто нужно указать компилятору, что объявленная вами переменная является массивом, а не фактическим размером массива. Он вычислит размер на основе размера возвращаемого массива.

Кроме того, вы всегда должны указывать тип возвращаемого значения для ваших функций. Вы делаете это в VB, помещая предложение As Type в конце объявления функции. В этом случае вам нужен массив значений типа double, записанный как 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», как и ожидалось.

2 голосов
/ 19 мая 2011
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...