Передача массива как параметр!

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Keen
Обычный пользователь
Обычный пользователь
 
Сообщения: 83
Зарегистрирован: 25.04.2004 (Вс) 10:45
Откуда: Россия => Москва

Передача массива как параметр!

Сообщение Keen » 20.07.2004 (Вт) 15:42

У меня есть такая функция:

Код: Выделить всё
function somefunc(arr() as string,arrxdim as long,arrydim as long)
...
end fucntion


Массив - динамический, однако мы знаем что он - двумерный и еще знаем его размерность по двум последим параметрам.
Вопрос: как получить значение какждого элемента (x,y) массива arr()? Функция находится в классе.

Код: Выделить всё
' Вызов функции
dim func as new someclass
dim xarr(100,100) as string
xarr(5,6)="Value"
func.somefunc(xarr,100,100)


Такой код не работает, пишет что переменная не определена:
Код: Выделить всё
' Полный код этой самой somefunc в классе someclass
function somefunc(arr() as string,arrxdim as long,arrydim as long)
   redim preserve arr(arrxdim,arrydim) ' ТУТ ОШИБКА
   somevalue$=arr(5,6)
end fucntion


Если в параметрах вызова функции менять xarr на xarr(), результат не меняется.

В чем дело?!

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 20.07.2004 (Вт) 15:53

Можно обойтись и без двух последних параметров, arrxdim=UBound(arr,1), arrydim=UBound(arr,2).
Не пробовал вызывать, как xarr()?
Lasciate ogni speranza, voi ch'entrate.

codemaster
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 604
Зарегистрирован: 13.02.2004 (Пт) 13:35

Re: Передача массива как параметр!

Сообщение codemaster » 20.07.2004 (Вт) 16:01

Какие богатые желания !

Для начала попробуй следующий код:

Код: Выделить всё
Dim xarr(3) As String
ReDim xarr(5)
xarr(5) = "Value"


и

Код: Выделить всё
Dim xarr() As String
ReDim xarr(5)
xarr(5) = "Value"


какие мысли ?

Keen
Обычный пользователь
Обычный пользователь
 
Сообщения: 83
Зарегистрирован: 25.04.2004 (Вс) 10:45
Откуда: Россия => Москва

Сообщение Keen » 20.07.2004 (Вт) 17:02

xarr() на xarr менял - не помогает

2CodeMaster: в первом примере VB говорит, что массив уже имеет размерность.

Leon_
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 333
Зарегистрирован: 19.05.2004 (Ср) 16:31
Откуда: Moscow

Сообщение Leon_ » 21.07.2004 (Ср) 7:58

Так в этом то и смысл послания codemaster (возьму на себя роль переводчика :) ), что ReDim применяется только к массивам, объявленным пустыми (без указания размерности). Вот:
The ReDim statement is used to size or resize a dynamic array that has already been formally declared using a Private, Public, or Dim statement with empty parentheses (without dimension subscripts).

И в твоем примере должно быть
Код: Выделить всё
' Вызов функции
dim func as new someclass
dim xarr() as string
xarr(5,6)="Value"
func.somefunc(xarr,100,100)

Approximator
Постоялец
Постоялец
 
Сообщения: 572
Зарегистрирован: 26.06.2004 (Сб) 3:10

Re: Передача массива как параметр!

Сообщение Approximator » 21.07.2004 (Ср) 7:58

Keen писал(а):У меня есть такая функция:



Массив, ясен пень, дожОн быть динамическим, то есть
Код: Выделить всё
Dim xarr() as string

А вот ReDim Preserve можно только по последней размерности, вроде следующего:
ReDim Preserve arr(Lbound1 to Ubound1, Lbound2 to NewUbound2)

и никак иначе...
С уважением, Approximator.


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 15

    TopList