为什么这种类型无法访问?

时间:2012-01-05 23:04:42

标签: scope fortran gfortran

我正在尝试从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)中,我收到以下错误:

  

错误:无法访问(1)中'somefunction'功能的类型

我将文件编译为:

gfortran -c ./test.F90

我尝试将该类型明确公开,但这没有帮助。我打算使用某个功能的c版本,这就是我把它放在界面部分的原因。

为什么类型无法访问?

2 个答案:

答案 0 :(得分:5)

在函数定义中添加 import 可修复此问题。由于许多人认为语言设计中存在错误,因此定义不会在接口内部继承。 “导入”会覆盖这一点以实现合理的行为。

interface
   ! define a function that returns the previously defined type
   type(sometype) function somefunction()
   import
   end function somefunction
end interface

答案 1 :(得分:3)

为什么它无法访问的问题的答案是标准委员会就是这样设计的。该接口具有与封闭模块不同的范围,因此您必须从中显式导入名称。显然(?)你不能use内部的模块,所以需要import语句。