变量定义上下文编译错误中的非变量表达式
Non-variable expression in variable definition context compilation error
我在使用 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
谁能解释一下这个错误的含义以及我该如何解决它?
您不能 post 表达式或常数到 intent(OUT)
或 intent(INOUT)
参数。您必须始终传递一个变量,因为它可以在您调用的过程中更改。
所以因为 abc_output
的第六个参数是 intent(OUT)
或(更有可能)intent(INOUT)
你首先必须将 get_ab_dat(p_f)
的值赋给一个变量然后你必须将变量传递给 abc_output
。小心参数别名。
在这种特殊情况下,参数也是 allocatable
,因此变量也必须是 allocatable
。
我在使用 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
谁能解释一下这个错误的含义以及我该如何解决它?
您不能 post 表达式或常数到 intent(OUT)
或 intent(INOUT)
参数。您必须始终传递一个变量,因为它可以在您调用的过程中更改。
所以因为 abc_output
的第六个参数是 intent(OUT)
或(更有可能)intent(INOUT)
你首先必须将 get_ab_dat(p_f)
的值赋给一个变量然后你必须将变量传递给 abc_output
。小心参数别名。
在这种特殊情况下,参数也是 allocatable
,因此变量也必须是 allocatable
。