在其他文件中定义的函数中访问Fortran模块

时间:2010-05-19 12:58:27

标签: fortran

我正在使用Fortran 90.我在fileA.f中定义了一个Fortran模块:

module getArr
   double precision a(100)
end module getArr

相同的fileA.f包含使用此模块的子例程:

subroutine my_sub
   use getArr
   implicit none

   a(1) = 10.5

end subroutine

fileB.f中,我有一个Fortran 功能。我正在尝试将a(1)的值设为:

double precision function my_func(R)
  use getArr
  double precision x
  x = a(1)

  return 
end

但是我在编译时遇到错误。它说它无法访问模块getArr。这与在函数中使用模块而不是在子例程中的使用有关吗?我该如何申报我的职能?

2 个答案:

答案 0 :(得分:3)

T.E.D。语法是否正确 - “getArr%”不是数组“a”的名称的一部分。该表示法用于用户派生类型。

语言标准之外的另一个方面 - 编译源代码: 对于大多数编译器,您需要按顺序编译文件,将包含模块的源代码文件放在任何使用它的单独文件之前。编译器必须先“知道”模块才能使用它。

另外,你的例子中有一个主程序吗?

如果仍然无效,请向我们显示确切的错误消息。

答案 1 :(得分:1)

看起来您正在尝试将getArr%用作某种模块说明符。你确定没错吗?我不是f90专家,但我的编译器似乎不支持这样的东西。完成use后,该模块中的所有内容都在本地可用,就像您在子例程中声明的那样。

尝试删除getArr%,看看会发生什么。