Использование указателя производного типа и полиморфной цели в Фортране
Функция Fortran, перечисленная ниже, компилируется и выполняется, как ожидается, используя ifort 11.1. Однако GFortran 4.6 возвращает ошибку компилятора:
THIS_NML => ЭТО
Ошибка: Различные типы в назначении указателя в (1); попытка присвоения CLASS(UNIT) типу (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
используется для создания списка имен. Есть идеи, как заставить это работать с 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