分配给延迟长度字符串数据类型组件

时间:2019-07-25 17:45:34

标签: fortran

以下代码在GFortran和Intel Fortran中均给出错误,但看起来完全合理且毫不含糊。

GFortran错误为

  

具有非零等级的零件引用右侧的组件不得具有可分配的属性

program vls

type :: tString
  character(:), allocatable :: S
end type

type(tString) :: Strings(2)

  Strings%S = 'xxx'

end program

我无法分配给可分配的数组,但不能分配给可分配的标量。这真的是标准所要求的吗?

2 个答案:

答案 0 :(得分:0)

您只是在“快速移动”。 StringstString类型的向量,长度为2。

您不能直接分配给Strings%S(这可能松散地对应于向量S中的所有属性Strings

例如,将第一项分配为Strings(1)%S

program vls

  type :: tString
     character(:), allocatable :: S
  end type tString

  type(tString) :: Strings(2)

  Strings(1)%S = 'xxx'

  write(*,*) Strings(1)%S

end program vls

答案 1 :(得分:0)

是的,该禁令适用于任何可分配的对象,而不仅仅是数组。在Fortran 2018中,这是约束C919:

  

排名不为零的 part-ref 不得超过一个。具有非零等级的 part-ref 右侧的 part-name 不应具有ALLOCATABLE或POINTER属性

对于延迟长度的此组件,在接受延迟大小数组的限制时,很难接受它被允许。但是,即使可分配属性的长度恒定(即使长度为1),也是不允许的。

相关问题