受保护 在模块外不可见
protected not visible outside the module
以下代码片段
module test
private
protected :: a
integer :: a = 0
end module test
use test
implicit none
print*, a
end program
导致错误,对于 gfortran 和 ifort,变量 'a' 必须具有显式类型。如果将 'protected' 移动到声明 'a' 的行中,我也会收到错误消息。如果 'a' 具有 public 属性(删除 'private' 关键字,将 'public :: a' 放在 'private' 之后,或者我将 'public' 与 'a = 0') 在同一行。我只通过
得到了想要的 read-only public 行为
public :: a
integer, protected :: a = 0
因此,除非 'protected' 伴随着 'public',否则它的行为类似于 'private'。难道我做错了什么?我正在尝试遵循 Clerman 和 Spector 的 "Modern Fortran" 他们建议模块 header 始终具有形式
private
protected :: <access-id-list>
public :: <access-id-list>
对象的可能辅助功能属性是 public
和 private
。 protected
不是可访问性属性,尽管这三个属性的分组很可能表明这一点。
特别是,指定 protected
属性并不意味着 public
属性,因此 private
的默认可访问性适用于变量 a
.
以下代码片段
module test
private
protected :: a
integer :: a = 0
end module test
use test
implicit none
print*, a
end program
导致错误,对于 gfortran 和 ifort,变量 'a' 必须具有显式类型。如果将 'protected' 移动到声明 'a' 的行中,我也会收到错误消息。如果 'a' 具有 public 属性(删除 'private' 关键字,将 'public :: a' 放在 'private' 之后,或者我将 'public' 与 'a = 0') 在同一行。我只通过
得到了想要的 read-only public 行为 public :: a
integer, protected :: a = 0
因此,除非 'protected' 伴随着 'public',否则它的行为类似于 'private'。难道我做错了什么?我正在尝试遵循 Clerman 和 Spector 的 "Modern Fortran" 他们建议模块 header 始终具有形式
private
protected :: <access-id-list>
public :: <access-id-list>
对象的可能辅助功能属性是 public
和 private
。 protected
不是可访问性属性,尽管这三个属性的分组很可能表明这一点。
特别是,指定 protected
属性并不意味着 public
属性,因此 private
的默认可访问性适用于变量 a
.