2017-08-30 12 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) 

と、このコンパイルエラーを取得しています

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 
の下に示されているget_ab_dat関数は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) 

であります

誰かがそのエラーの意味と解決方法を説明できますか?

+0

完全なコードと完全なエラーメッセージを表示してください。エラーメッセージの(1)はどこに? –

+0

ところで、あなたのコードはFortran90ではなくFortran 2003なので、fortran90タグは混乱します。ファイル拡張子.f90は、Fortran 90を意味するものではなく、固定形式のソースを意味します。 –

+0

はおそらく 'abc_output'に関連付けられています。 – agentp

答えて

2

intent(OUT)またはintent(INOUT)引数に式または定数を送信することはできません。変数は、呼び出しているプロシージャで変更できるので、常に渡す必要があります。だから、

abc_outputの6番目の引数がintent(OUT)または(可能性が高い)であるため、intent(INOUT)あなたは最初の変数にget_ab_dat(p_f)の値を割り当てる必要があり、あなたはabc_outputに変数を渡す必要があります。引数のエイリアシングには注意してください。

この場合、引数もallocatableであるため、変数はallocatableである必要があります。