【发布时间】:2012-03-11 19:46:36
【问题描述】:
下面列出的 Fortran 函数使用 ifort 11.1 按预期编译和执行。但是 GFortran 4.6 返回编译器错误:
THIS_NML => 这
错误:(1) 处的指针赋值类型不同;尝试将 CLASS(UNIT) 分配给 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 进行这项工作?
【问题讨论】:
标签: pointers fortran gfortran polymorphism