我正在尝试在子例程中使用可分配数组,但编译器抱怨
Error: Dummy argument 'locs' with INTENT(IN) in variable definition context (ALLOCATE object) at (1)
我唯一能找到的是我应该使用一个显式接口,我正在做。这里是子程序的相关代码:
RECURSIVE SUBROUTINE together(locs, LL, RL)
INTEGER, DIMENSION(:,:), ALLOCATABLE, INTENT(IN) :: locs
INTEGER, INTENT(IN) :: LL, RL
ALLOCATE(locs(LL,RL))
END SUBROUTINE together
答案 0 :(得分:5)
编译器的错误消息是对问题的描述。使用INTENT(IN)
,您说该对象不会更改,但您会继续尝试ALLOCATE
。
是的,调用需要一个显式接口,但这不是问题。
Fortran 2008标准在第5.3.10节中说明了
具有INTENT(IN)属性的非指针对象不应出现在变量定义上下文
中
分配是一个这样的背景:第16.6.7节,第(11)节。
答案 1 :(得分:2)
locs
伪参数是可分配的,并且具有INTENT(IN)属性 - 此处的intent属性指示调用过程向子例程提供信息。
INTENT(IN)属性的结果是您无法更改locs
的分配状态(或值)。您的ALLOCATE语句正在尝试这样做。
答案 2 :(得分:0)
尝试在主程序中分配数组,然后在将locs
推送到子程序时,使用INTENT(INOUT)
告诉编译器您还想更改数组的内容。