首页 > 解决方案 > 将对象从一个模块传递到另一个模块的子例程

问题描述

我有两个模块文件 mod1.f95 和 mod2.f95。Mod1 有 rk4 和插值方法等数学函数,我一直在努力保持它的通用性,以便我可以将模块重用于其他项目。Mod2 有一个在其中定义的类结构 Obj1,并且是特定于该项目的。问题是 mod1 中定义的子例程现在需要一个对象定义传递一些东西

subroutine driver(x1, x2, func, this)
  real(kind=8) :: x1, x2
  external :: func, this         ! this is the Object
  ! ...
end subroutine driver

我从中得到的错误是

Type mismatch in argument 'this' at (1); passed TYPE(Obj1) to UNKOWN

我有一种感觉会发生这种情况,因为external关键字是用于函数和子例程的,但我想将一个 Object 传递给子例程,而不必将我的 mod2 硬编码到 mod1 中(即使用use mod2

我厌倦了这种变化

subroutine driver(x1, x2, func, this)
  real(kind=8) :: x1, x2
  class(Object) :: this
  external :: func
  ! ...
end subroutine driver

但是得到了Derived type 'object' at (1) is being used before it is defined。我也尝试过type(Object) :: this产生同样的错误。

重申一下,我想看看是否有一种方法可以在“一般”意义上初始化一个对象,以便我创建的其他模块和文件可以直接链接到这个 mod1,而无需更改里面的代码。任何意见,将不胜感激!

标签: oopobjectfortrangfortran

解决方案


推荐阅读