Почему тип не доступен? - PullRequest
       19

Почему тип не доступен?

3 голосов
/ 06 января 2012

Я пытаюсь вернуть тип из функции fortran. Это код.

module somemodule
implicit none
! define a simple type
type sometype
   integer :: someint
end type sometype
! define an interface 
interface
   ! define a function that returns the previously defined type
   type(sometype) function somefunction()
   end function somefunction
end interface
contains
end module somemodule

В gfortran (4.4 и 4.5) я получаю следующую ошибку:

Ошибка: тип для функции 'somefunction' в (1) недоступен

Я скомпилировал файл как:

gfortran -c ./test.F90

Я пытался сделать тип явно открытым, но это не помогло. Я планировал использовать c-версию somefunction, поэтому я поместил ее в раздел интерфейса.

Почему тип недоступен?

Ответы [ 2 ]

5 голосов
/ 06 января 2012

Добавление import в определении функции исправляет это. Из-за того, что многие считают ошибкой в ​​дизайне языка, определения не наследуются внутри интерфейса. «Импорт» отменяет это для достижения разумного поведения.

interface
   ! define a function that returns the previously defined type
   type(sometype) function somefunction()
   import
   end function somefunction
end interface
3 голосов
/ 06 января 2012

Ответ на вопрос, почему он недоступен, заключается в том, что комитет по стандартизации разработал его таким образом. Интерфейс имеет отдельную область видимости от включающего модуля, поэтому вы должны явно импортировать из него имена. Очевидно (?) Вы не можете use модуль внутри себя, поэтому необходим оператор import.

...