2012-03-11 10 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

関連する問題