首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >是否要删除Fortran数组中的变量?

是否要删除Fortran数组中的变量?
EN

Stack Overflow用户
提问于 2018-06-08 16:42:32
回答 1查看 249关注 0票数 2

我有一个下面的代码,有一个抽象类型,继承类型和一个简短的程序,在那里我创建了一个对象并将其存储在一个数组中。

代码语言:javascript
复制
module m
    implicit none

    type :: container
        class(a), allocatable :: item
    end type container

    type, abstract :: a
        integer, public :: num
    end type a

    type, extends(a) :: b
        integer, public :: num2
   end type b
end module m

program mwe
    use m

    implicit none

    class(a), allocatable :: o1
    class(container), allocatable :: arr(:)

    o1 = b(1, 2)

    allocate(arr(2))
    arr(1) = container(o1)

    select type(t => o1)
        type is(b)
        write(*,*) t%num, t%num2
    end select

    select type(t => arr(1)%item)
        type is(b)
        write(*,*) t%num, t%num2
    end select
end program mwe

问题是,输出如下所示:

代码语言:javascript
复制
       1           2
       1           0

可以看出,存储在数组中的同一变量将第二个变量置为空。为什么会发生这种情况?是因为数组的类型是a,它只包含第一个变量吗?

我正在用ifort version 18.0.3编译代码。

EN

回答 1

Stack Overflow用户

发布于 2018-06-08 17:43:40

我相信

代码语言:javascript
复制
arr(1) = container(o1)

无效的Fortran 2008。这是一个内部赋值语句,但标准的第7.2.1.2节规定

在内部赋值语句中,(1)如果变量是多态的,它应该是可分配的,而不是共数组。

据我所知,arr(1)是多态的,但不是可分配的,因此符合标准的编译器应该发出一个错误并中止编译。

如果我的推理正确,英特尔Fortran编译器编译此代码的事实是编译器错误,应向英特尔报告。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50756696

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档