FORTRAN - 子例程中的可分配数组

时间:2014-03-04 10:30:40

标签: arrays fortran subroutine

我正在尝试在子例程中使用可分配数组,但编译器抱怨

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

3 个答案:

答案 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)告诉编译器您还想更改数组的内容。