2012-03-11 47 views
1

下面列出的Fortran函數按照預期使用ifort 11.1進行編譯和執行。然而GFortran 4.6返回編譯器錯誤:在Fortran中使用派生類型指針和多態目標

THIS_NML => THIS
Error: Different types in pointer assignment at (1); attempted assignment of CLASS(UNIT) to TYPE(UNIT).

Fortran代碼:

FUNCTION PROCESS_COMMAND(THIS, CMD, DATA) RESULT(RET) 
    CLASS(UNIT), INTENT(INOUT), TARGET :: THIS 
    CHARACTER(LEN = *), INTENT(IN)  :: CMD 
    CHARACTER(LEN = *), INTENT(IN)  :: DATA 
    CHARACTER(LEN = 200)    :: STRING 
    INTEGER       :: IOS 
    TYPE(UNIT), POINTER    :: THIS_NML 

    ! CREATE A NAMELIST 
    NAMELIST /VARS/ THIS_NML 
    THIS_NML => THIS 
    RET = 0 
    STRING = '&VARS THIS_NML%' // TRIM(CMD) // ' = ' // TRIM(DATA) // ' /' 

    ! READ CMD AND DATA 
    READ(STRING, NML=VARS, IOSTAT=IOS) 
    RET = IOS 

END FUNCTION PROCESS_COMMAND 

因爲名稱列表的不能使用多態對象被創建,派生類型指針THIS_NML被用於創建名稱列表。任何想法如何使這與GFortran工作?

回答

1

嘗試使用select type構造。類似於

select type (A => THIS) 
    type is (UNIT) 
     Here you can treat A as nonpolymorphic variable of type UNIT (if the test is succesful). 
end select 
+0

謝謝!這編譯和運行在gfortran 4.6和ifort 11.1中。 – mannyburet 2012-03-13 02:41:40

相關問題