我正在使用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
。这与在函数中使用模块而不是在子例程中的使用有关吗?我该如何申报我的职能?
答案 0 :(得分:3)
T.E.D。语法是否正确 - “getArr%”不是数组“a”的名称的一部分。该表示法用于用户派生类型。
语言标准之外的另一个方面 - 编译源代码: 对于大多数编译器,您需要按顺序编译文件,将包含模块的源代码文件放在任何使用它的单独文件之前。编译器必须先“知道”模块才能使用它。
另外,你的例子中有一个主程序吗?
如果仍然无效,请向我们显示确切的错误消息。
答案 1 :(得分:1)
看起来您正在尝试将getArr%
用作某种模块说明符。你确定没错吗?我不是f90专家,但我的编译器似乎不支持这样的东西。完成use
后,该模块中的所有内容都在本地可用,就像您在子例程中声明的那样。
尝试删除getArr%
,看看会发生什么。