2017-08-30 3 views
2

Ich erhalte diese Kompilierungsfehler mit gfortran 5.4 und einen .f90 CodeNicht variable Ausdruck in Variablendefinition Kontext Kompilierungsfehler

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) 

Der Methodenaufruf, der die Kompilierung Fehler generiert wird unter und der Fehler angezeigt auf 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) 

Die Funktion wird unten 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 
gezeigt

Kann jemand erklären, was dieser Fehler bedeutet und wie ich ihn beheben kann?

+0

Bitte zeigen Sie den vollständigen Code und die vollständige Fehlermeldung an. Wo zeigt (1) in der Fehlermeldung auf? –

+0

BTW, Ihr Code ist nicht Fortran 90, sondern Fortran 2003, also ist das Fortran90-Tag verwirrend. Die Dateiendung .f90 bedeutet nicht Fortran 90, sondern eine feste Formquelle. –

+0

vielleicht mit 'abc_output' verbunden, zeigen Sie das. – agentp

Antwort

2

Sie können einen Ausdruck oder eine Konstante nicht in ein intent(OUT) oder intent(INOUT) Argument posten. Sie müssen immer eine Variable übergeben, da sie in der Prozedur geändert werden kann, die Sie aufrufen. So

weil das sechste Argument von abc_output ist intent(OUT) oder (wahrscheinlicher) intent(INOUT) Sie zuerst den Wert von get_ab_dat(p_f) einer Variablen zuweisen müssen, und Sie müssen die Variable abc_output passieren. Seien Sie vorsichtig beim Argument-Aliasing.

In diesem speziellen Fall ist das Argument auch allocatable, also muss die Variable auch allocatable sein.

Verwandte Themen