保护在模块外部不可见

时间:2015-03-09 19:42:46

标签: fortran

以下代码段

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'相同的行中“)。我只能使用

获得所需的只读公共行为
  public :: a
  integer, protected :: a = 0

因此,除非'受保护'伴随'公开',否则它就像'私人'一样。难道我做错了什么?我正在尝试遵循Clerman和Spector的“Modern Fortran”,他们建议模块标题始终具有表格

private
protected :: <access-id-list>
public :: <access-id-list>

1 个答案:

答案 0 :(得分:3)

对象的可访问性属性为publicprivateprotected不是一个可访问属性,尽管三者的分组可能表明这一点。

特别是,指定protected属性并不意味着public属性,因此private的默认辅助功能适用于变量a