在我的Fortran代码中,我在模块中定义变量,我使用USE
语句在主程序中使用它们。
为了限制访问我的模块的内容,默认情况下我将所有变量/函数/子例程声明为private
,然后明确声明哪些是公共的。
当我想访问我在主程序中使用的模块的变量/函数/子例程时,这很有效,但是当模块mod1
使用另一个模块mod2
时,似乎所有mod2
的变量/函数/子例程变为私有mod1
,无法从主程序访问。
在mod2
公开发布我的公开声明的关键字是什么,以便我可以从主程序访问它们?
以下是我的问题的最低工作示例
main.f90时
program main
use mod1
implicit none
print*,publicvar
end program main
mod1.f90
module mod1
use mod2
private
end module mod1
mod2.f90
module mod2
private
integer, parameter, public :: publicvar = 1
end module mod2
运行示例:
>ifort mod2.f90 mod1.f90 main.f90 -o main
main.f90(6): error #6404: This name does not have a type, and must have an explicit type. [PUBLICVAR]
print*,publicvar
---------^
如果我删除private
中的mod1
语句,它会起作用,但这对我来说是不可接受的,因为我希望默认情况下我所有的变量/ functions / subroutines都保留在模块中。
答案 0 :(得分:2)
在mod1
中使用PUBLIC语句,将mod2
关联使用的内容标记为mod1
的公共实体。
module mod1
use mod2
private
public :: publicvar ! from mod2
end module mod1