【问题标题】:Using a derived type pointer and a polymorphic target in Fortran在 Fortran 中使用派生类型指针和多态目标
【发布时间】: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


    【解决方案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
    

    【讨论】:

    • 谢谢!这可以在 gfortran 4.6 和 ifort 11.1 中编译和运行。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-09-20
    • 1970-01-01
    • 2020-02-09
    • 2014-02-06
    • 2012-12-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多