| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > 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 | ||
Вариантов три. Первый (идеологически неправильный) - вызывать компилятор без ключа, автоматически включающего "implicit none". Второй (идеологически более правильный) - добавить в основную программу строчку
Третий (еще более правильный) - вынести реализацию функции в отдельный модуль, а потом use'ать этот модуль в основной программе. Все дело в том, что в момент обнаружения вызова функции in компилятор еще не знает, что она описана ниже (и, как следствие, не знает, что это такое). Поэтому ее надо как-то описать. Первый способ дает возможность компилятору решить, что функция in "по умолчанию" целочисленная, второй просто заранее ему это сообщает, в третьем случае компилятор полезет в модуль сразу в начале программы и заранее выяснит, что такое in. |
| Автор: popovda 2.6.2009, 11:29 |
| Введите явную типизацию данных и используйте implicit none. Повысите надежность программирования. |
| Автор: mixala 2.6.2009, 20:41 |
| Спасибо, разобрался. |