2017-08-30 66 views
2

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

有人可以解釋那個錯誤意味着什麼以及我如何解決它?

+0

請顯示完整的代碼和完整的錯誤信息。錯誤消息中的(1)指向哪裏? –

+0

順便說一句,你的代碼不是Fortran 90,而是Fortran 2003,所以fortran90標籤很混亂。文件擴展名.f90並不意味着Fortran 90,而是指固定格式的源文件。可能與'abc_output'關聯的 –

+0

表明。 – agentp

回答

2

您不能將表達式或常量發送到intent(OUT)intent(INOUT)參數。您必須始終傳遞一個變量,因爲它可以在您調用的過程中進行更改。

如此,是因爲abc_output第六個參數是intent(OUT)或(更可能)intent(INOUT)你首先得的get_ab_dat(p_f)值賦值給一個變量,你必須將變量傳遞給abc_output。注意參數別名。

在這種特殊情況下,參數也是allocatable,所以變量也必須是allocatable