以下代码段
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>
答案 0 :(得分:3)
对象的可访问性属性为public
和private
。 protected
不是一个可访问属性,尽管三者的分组可能表明这一点。
特别是,指定protected
属性并不意味着public
属性,因此private
的默认辅助功能适用于变量a
。