Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [General] Использование динамического массива в, качестве необязательного форм. параметра 
V
    Опции темы
Mikha
Дата 25.9.2008, 14:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 25.9.2008

Репутация: нет
Всего: нет



Добрый день!
Столкнулся со следующей проблемой: при написании внешней функции в качестве формальных параметров указал 4 динамических массива. Поскольку предполагается, что неизвестно сколько на самом деле нужно будет использовать массивов, сделал эти массивы необязательными.
Примерно так:
Код

program test
    interface
        integer function my_func(arr1, arr2, arr3, arr4)
            integer, allocatable, optional:: arr1(:), arr2(:), arr3(:), arr4(:)
        end function my_func
    end interface
    integer ret
    integer, allocatable:: arr1(:)
    ret = my_func(arr1)
end program test
integer function my_func(arr1, arr2, arr3, arr4)
    integer, allocatable, optional:: arr1(:), arr2(:), arr3(:), arr4(:)
    if (present(arr1) .and. present(arr2) .and. present(arr3) .and. present(arr4)) then
        allocate(arr1(1), arr2(2), arr3(3), arr4(4))
    end if
    my_func = 0
end function my_func

В результате выполнения программы вылазит ошибка.
Причем если в программе при вызове функции указать все параметры, то все работает прекрасно.
Подскажите, в чем дело?
PM MAIL   Вверх
Mikha
Дата 26.9.2008, 04:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 5
Регистрация: 25.9.2008

Репутация: нет
Всего: нет



Спасибо всем, кто задумался над моей проблемой. Я ее уже решил: поменял allocatable в описании массивов на pointer, и все заработало.
PM MAIL   Вверх
popovda
Дата 2.11.2008, 11:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 290
Регистрация: 9.6.2006
Где: Москва

Репутация: нет
Всего: 6



Весь вопрос в том, какая ошибка вылезала. С pointer нельзя задать спецификаторы доступа к переменной intent(in|out|inout) в большинстве компиляторов. Будьте внимательнее при работе с ними.


--------------------
С уважением, Попов Д.А.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Fortran | Следующая тема »


 




[ Время генерации скрипта: 0.0524 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.