compiler-errors - SELECT TYPE 构造中的多态性分配

标签 compiler-errors polymorphism fortran allocation fortran2003

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

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

关于compiler-errors - SELECT TYPE 构造中的多态性分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26284342/

相关文章:

error-handling - 使用rust 错误 : The size for values of type `(dyn std::error::Error + ' static)` cannot be known at compilation time

c++ - Casting - 为什么我应该为 Upcasting 做这件事

c++ - 如何覆盖模板化子类中的非模板化方法

fortran - 将泛型过程作为实际参数传递给函数

fortran - 根据输入 i,j 从 3x3 中提取次矩阵

c - 如何通过终端编译C文件

c++ - 错误LNK1169 : one or more multiply defined symbols found

c# - 无法写入输出文件——访问被拒绝

javascript - typescript 多态性

C 中的 PHP 扩展。如何使用字符串参数调用 Fortran 子例程?