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

Fortran 变量定义上下文中的非变量表达式编译错误,fortran,gfortran,fortran2003,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

我在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

有人能解释一下这个错误是什么意思,以及我如何修复它吗?

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

因此,由于
abc\u output
的第六个参数是
intent(OUT)
或(更可能是)
intent(INOUT)
您首先必须将
get\u ab\u dat(p\u f)
的值分配给一个变量,并且必须将该变量传递给
abc\u output
。小心参数别名


在这种特殊情况下,参数也是可分配的,因此变量也必须是可分配的。

请显示完整代码和完整错误消息。错误消息中的(1)指向哪里?顺便说一句,您的代码不是Fortran 90,而是Fortran 2003,因此Fortran 90标记令人困惑。文件扩展名.f90并不意味着Fortran 90,它意味着固定格式的源代码。可能与
abc_输出
相关,表明@agentp-abc_输出非常大。我可以把申报部分贴在最上面吗?可以。事实上,这些论点的意图就足够了。无论如何,它可能是一个复制品。