小编Ren*_*eno的帖子

Fortran多态,函数和分配

我在使用Fortran的OOP中是一个初学者,我正在尝试编写一个程序,该程序将多态变量作为参数处理.虽然我的原始代码要复杂得多(许多程序,几个派生类型等),但我可以找出一个简单的问题示例,例如:我有一个复制多态变量并略微修改此副本的过程.

我能够使用子程序成功编写我的测试程序:

MODULE my_module

type :: my_type
    real :: data
endtype my_type

type, extends(my_type) :: my_derived_type
end type my_derived_type

CONTAINS

subroutine sub_copy(old,new) 
implicit none
class(my_type), intent(in) :: old
class(my_type), allocatable, intent(out) :: new
allocate(new, source = old)
new%data = new%data + 1
end subroutine sub_copy

END MODULE my_module

PROGRAM my_prog
use my_module
implicit none
type(my_derived_type) :: x
class(my_type), allocatable :: y

x%data = 1.0
call sub_copy(x,y)
print*,y%data
deallocate(y)

END PROGRAM my_prog
Run Code Online (Sandbox Code Playgroud)

这在预期结果和内存分配/释放方面都表现良好.

但是,我一直在努力争取使用可以完成同样工作的Fortran 功能.

似乎以与子例程类似的方式定义的函数(见下文)不能简单地用作

y = …
Run Code Online (Sandbox Code Playgroud)

polymorphism fortran memory-leaks function fortran2003

6
推荐指数
1
解决办法
508
查看次数