2012-03-11 4 views
1

아래 열거 된 Fortran 함수는 ifort 11.1을 사용하여 예상대로 컴파일되고 실행됩니다.Fortran에서 파생 형 포인터와 다형성 대상 사용

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

포트란 코드 :

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이 이름 목록을 생성하는 데 사용되는 그러나 4.6 반환 컴파일러 오류를 GFortran. 어떤 아이디어라도 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