You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Fortran中指向多态对象的指针如何初始化指向派生类实例

错误原因

你尝试的foo => co(1)不符合Fortran语法规则:co(1)是构造函数生成的临时对象,临时对象在当前语句执行结束后就会被销毁,Fortran不允许指针直接绑定到临时对象上,就算语法允许也会产生悬空指针。

正确实现方案

以下三种都是合法的实现方式,可根据实际场景选择:

  • 方案1:使用ALLOCATE配合source参数(最简洁)
    直接在分配内存时完成类型指定和成员初始化:

    ALLOCATE(foo, source=co(i=1))
    

    该写法会自动将foo分配为co类型的多态对象,同时完成成员i的赋值。

  • 方案2:绑定到带target属性的已有co类型变量
    如果你有生命周期覆盖foo使用周期的实体变量,可以用该方案:

    ! 声明带target属性的派生类变量
    type(co), target :: co_inst
    co_inst%i = 1
    ! 指针绑定到实体变量
    foo => co_inst
    
  • 方案3:分配后通过SELECT TYPE显式赋值
    适合需要分开执行分配、赋值操作的场景:

    ! 显式指定分配的类型为co
    ALLOCATE(co::foo)
    ! 类型选择后操作派生类专属成员
    SELECT TYPE(foo)
    TYPE IS(co)
      foo%i = 1
    END SELECT
    

你可以通过内置函数SAME_TYPE_AS(foo, co())验证类型是否设置正确,返回.true.即代表foo运行时类型为co。

内容的提问来源于stack exchange,提问作者Frank

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 09:15:03