oop - 将对象从一个模块传递到另一个模块的子例程
问题描述
我有两个模块文件 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,而无需更改里面的代码。任何意见,将不胜感激!
解决方案
推荐阅读
- javascript - 无法使用 jQuery 中的远程方法从 NodeJS 服务器获得响应
- c# - 在 Autofac 中设置默认的 ConstructorSelector
- rust - 价值的生命周期与借款的生命周期
- perl - SSL23_GET_SERVER_HELLO:运行 perl 脚本时的未知协议
- plsql - 如何在 ORACLE APEX 中将逗号作为页面项传递
- html - HTML YouTube 嵌入未按预期播放
- android - 如何在不使用 JW 播放器中的播放按钮图标的情况下在 android 中点击播放视频
- c# - 如何检查 JToken 属性值是否存在?
- angular - 如何使用角度 2 中的管道过滤列表
- java - Java : HTML 到 Excel 单元格