SELECT TYPE 构造中的多态性分配

2024-04-03

我试图定义一个分配不同类型数组的子例程。这是代码的简化版本:

subroutine Allocation1(Vec)
    class(*), allocatable, intent(out)      :: Vec(:)

    select type(Vec)
    type is(real(8))
        allocate(Vec(10)); Vec = 0.D0
    type is(complex(8))
        allocate(Vec(10)); Vec = (0.D0,0.D0)
    type is(integer)
        allocate(Vec(10)); Vec = 0
    endselect
endsubroutine Allocation1

但我收到了三个我不明白的错误消息:

error #8306: Associate name defined in ASSOCIATE or SELECT TYPE statements doesn't have ALLOCATABLE or POINTER attribute   [VEC]

如你看到的VEC是一个可分配的数组,所以我认为这个错误没有意义。这是什么意思?我该如何进行这项工作?

我正在使用 IVF XE 14.0.1.139。


看起来像一个编译器错误,适用于 Gfortran 和 Solaris Studio。我建议您联系英特尔官方支持。

正如 IanH 指出的那样,其他编译器可能在编译时出错。无论如何,无论是否符合标准,该过程仍然是无用的,因为要使选择类型起作用,变量仍然必须已经分配,​​因为过程的实际参数必须是多态的。你不能只是通过real, allocatable there.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SELECT TYPE 构造中的多态性分配 的相关文章

随机推荐