在我的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
的最低工作示例210module 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
,但是這不是我可以接受的,我想保持在默認情況下所有的變量/函數/子程序私人在模塊中。
我可以理解爲什麼有些人我們不幸的標籤[標籤:fortran90],但在一個關於子模塊的問題?真的嗎? –
@VladimirF儘管標題中提到了「子模塊」,但在我看來,問題並不在於它們。我已經編輯了(希望Mazmike會證實我是正確的)標題。 – francescalus
除了IanH的回答,您可以考慮:將mod1中的默認可訪問性公開,明確地將其實體隱藏起來;在主程序中使用'mod2'。 – francescalus