Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Fortran > [General] Возвращение значения из функции


Автор: mixala 1.6.2009, 20:36
Возникает ошибка  Error: This name does not have a type, and must have an explicit type.   [IN]
ну насколько я понимаю тут что-то с типами. Но k и in объявлены как интегеры, да и возвращается константа. Хотя может ошибка в том, что он пытается обратиться к функции как переменной?  Что делать?
Program Kryg
    real x,y,cx,cy,r
         integer k
    k=in(x,y,r,cx,cy)
end program

integer function in(bx,by,br,ccx,ccy)
    real bx,by,t,br,ccx,ccy
    t=sqrt((bx-ccx)*(bx-ccx)+(by-ccy*(by-ccy)))
    if (br>t)then
    in=1
    endif
end function

Автор: Фантом 2.6.2009, 01:02
Цитата(mixala @  1.6.2009,  20:36 Найти цитируемый пост)
Что делать?


Вариантов три. 

Первый (идеологически неправильный) - вызывать компилятор без ключа, автоматически включающего "implicit none". 

Второй (идеологически более правильный) - добавить в основную программу строчку
Код

        integer in


Третий (еще более правильный) - вынести реализацию функции в отдельный модуль, а потом use'ать этот модуль в основной программе.

Все дело в том, что в момент обнаружения вызова функции in компилятор еще не знает, что она описана ниже (и, как следствие, не знает, что это такое). Поэтому ее надо как-то описать. Первый способ дает возможность компилятору решить, что функция in "по умолчанию" целочисленная, второй просто заранее ему это сообщает, в третьем случае компилятор полезет в модуль сразу в начале программы и заранее выяснит, что такое in.

Автор: popovda 2.6.2009, 11:29
Введите явную типизацию данных и используйте implicit none. Повысите надежность программирования.

Автор: mixala 2.6.2009, 20:41
Спасибо, разобрался.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)