变量定义上下文编译错误中的非变量表达式

时间:2017-08-30 13:00:18

标签: fortran gfortran fortran2003

我收到gfortran 5.4和.f90代码

的编译错误
call abc_output(struc,nx,ny,nz,'AB'   ,get_ab_dat(p_f),&
                                                1
Error: Non-variable expression in variable definition context (actual argument to INTENT = OUT/INOUT) at (1)

生成编译错误的方法调用如下所示 并且错误在get_ab_dat

type(b_f)                :: p_f
call abc_output(struc,nx,ny,nz,'AB'   ,get_ab_dat(p_f),&
                               'BD'   ,get_bc_dat(p_f),&
                               'EF' ,  aaa )

函数get_ab_dat如下所示

function get_ab_dat(bf) result(qx_arr)
  type(b_f),intent(in) :: bf
  real,dimension(:,:,:),allocatable :: qx_arr
  qx_arr = bf%qx
end function get_ab_dat


subroutine abc_output (struc,nx,ny,nz,dname1,data1,&
       dname2,data2,dname3,data3,dname4,data4)

type(c_s),intent(in)                 :: struc
integer,intent(in)                           :: nx,ny,nz     
character(len=*),intent(in)                  :: dname1
real,dimension(:,:,:),allocatable,intent(inout)          :: data1
character(len=*),intent(in),optional         :: dname2,dname3,dname4    
real,dimension(:,:,:),allocatable,intent(inout),optional ::                 data2,data3,data4

有人可以解释一下这个错误意味着什么,以及我如何解决它?

1 个答案:

答案 0 :(得分:2)

您无法将表达式或常量发布到intent(OUT)intent(INOUT)参数。您必须始终传递变量,因为它可以在您调用的过程中更改。

因为abc_output的第六个参数是intent(OUT)或(更有可能)intent(INOUT),首先必须将get_ab_dat(p_f)的值赋给变量,然后你必须将变量传递给abc_output。请注意参数别名。

在这种特殊情况下,参数也是allocatable,因此变量也必须是allocatable