| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Для новичков > Как правильно вызывать функцию, возвращающую дин. |
| Автор: Juice 24.12.2009, 23:15 | ||||
| Господа, подскажите, как правильно вызвать функцию, возвращающую динамический массив значений? Подробнее: надо создать функцию (только чур не подсказывать Вижу это так:
В самой программе
По моей логике в MyAr должно содержаться 'Ис', 'ход', 'ная строка'. Это я описАл, как по моему мнению должно работать. На самом деле этот вариант не работает. Тест и номер ошибки не привожу, т.к., мне кажется это не суть важно из-за того, что я либо неправильно объявляю, либо неправильно вызываю. Пытаюсь это в D7 сделать. |
| Автор: profesiachuvak 24.12.2009, 23:33 | ||
Так а как нам понять, в чём ошибка? Телепатически? С точки зрения синтаксиса тут всё правильно Хотелось бы увидеть ошибку и текст самой функции:
|
| Автор: volvo877 24.12.2009, 23:43 | ||
Неправда... ОТКРЫТЫЙ и ДИНАМИЧЕСКИЙ массив - это совсем разные вещи...
|
| Автор: Juice 25.12.2009, 00:18 | ||
| volvo877, удивляюсь, почему у тебя плюсов так мало. Спасибо, заработало. А не подскажешь ещё синтаксис, как вызвать функцию без передачи ей в качестве параметров предварительно заполненного массива, а задавая конкретные значения? Например
|
| Автор: Snowy 25.12.2009, 12:42 | ||
|
| Автор: volvo877 25.12.2009, 14:34 |
| Это автору виднее... Хочешь - отправляй динамический, хочешь - нет... Но уж если он отправляет динамический (что видно из его кода), то функция должна ожидать динамический, правда? Что для этого надо сделать - я написал выше. |
| Автор: profesiachuvak 25.12.2009, 14:41 | ||||
Понятно, то есть как решение проблемы можно было описать массив так :
Или описание фун-ции SplitByPos от этого тоже изменилось? |
| Автор: Juice 25.12.2009, 18:48 | ||
| Просто хочется сделать универсальную функцию. Например, если тебе надо разбить строку на две (по определённой позиции), то надо писать функцию SplitNumberOne, где у тебя происходит разбивка на 2 подстроки. Следующую строку надо бить на четыре (по определённой позиции), опять пишем функцию SplitNumberTwo, бьющую входящую строку на 4 подстроки. Ну так вот, что бы не писать эти множество функций, проще сделать универсальную функцию, которой передаёшь исходную строку и номера позиций в ней, а она будет возвращать необходимое количество подстрок. Кроме как передавать функции динамический массив целых, а та, в свою очередь, возвратит динамический массив строк, я не знаю как достичь этой универсальности. А если использовать
|
| Автор: Qu1nt 25.12.2009, 19:28 | ||
|
| Автор: profesiachuvak 25.12.2009, 22:17 |
Конечно. Динамический массив универсальнее. |
| Автор: bems 26.12.2009, 08:44 | ||
будет работать. |
| Автор: Juice 26.12.2009, 17:13 | ||
Вызов процедуры вида
не получается. Ошибка "[Error] Unit1.pas(39): Incompatible types: 'Set' and 'ArrInt'", ArrInt = array of integer; |
| Автор: bems 26.12.2009, 17:30 |
| Я ж говорю, окрытый объявляй |
| Автор: Qu1nt 26.12.2009, 17:44 |
| Чем мой пример не понравился? |
| Автор: Juice 26.12.2009, 17:45 | ||||
Да, действительно, при объявлении
вызов
Отрабатывает на ура. Спасибо. Получается, у меня ошибка была не в вызове функции, а в её описании. |