Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oop 将对象从一个模块传递到另一个模块的子例程_Oop_Object_Fortran_Gfortran - Fatal编程技术网

Oop 将对象从一个模块传递到另一个模块的子例程

Oop 将对象从一个模块传递到另一个模块的子例程,oop,object,fortran,gfortran,Oop,Object,Fortran,Gfortran,我有两个模块文件mod1.f95和mod2.f95。Mod1有一些数学函数,比如rk4和插值方法,我一直试图保持它的通用性,以便我可以在其他项目中重用该模块。Mod2中定义了一个类结构Obj1,该类结构专门用于该项目。问题在于,mod1中定义的子例程现在需要一个对象定义,该对象定义沿着以下行传递 subroutine driver(x1, x2, func, this) real(kind=8) :: x1, x2 external :: func, this ! thi

我有两个模块文件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
关键字用于函数和子例程,但我想将一个对象传递给子例程,而无需将我的mod2硬编码到mod1(即使用
使用mod2

我找不到零钱了

subroutine driver(x1, x2, func, this)
  real(kind=8) :: x1, x2
  class(Object) :: this
  external :: func
  ! ...
end subroutine driver
但是(1)处的get
派生类型“object”在定义之前正在使用
。 我还尝试了
type(Object)::这个
,产生了相同的错误


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

你为什么反对(正确的)
使用mod2
?如果您想对
对象
有一个可访问的定义,那么您没有太多的选择。如果你能解释一下你想用
这个
做什么,我们也许可以提出一些建议。如果
mod1
应该是通用的,那么在另一个模块中定义的对象“需要”被传递到
mod1
?我发现分析有缺陷。你不能在
mod2
(定义对象的地方)中编写一个例程,从对象的特定成员上调用
mod1
中的例程吗?在子例程中,
external::func
也恰好是类对象的一部分,因此它看起来类似于
call func(this,x1,x2)
。我想我在想,在其他语言中,类是如何从一个总体对象类继承的,因为子程序驱动程序除了将对象传递给
func
之外,实际上并不处理对象,其目标是传递使用Obj1(或一些变量,取决于mod1)的某个指定接口(例如,对于Runge Kutta)的函数作为内部数据?为什么反对(正确的)
使用mod2
?如果您想对
对象
有一个可访问的定义,那么您没有太多的选择。如果你能解释一下你想用
这个
做什么,我们也许可以提出一些建议。如果
mod1
应该是通用的,那么在另一个模块中定义的对象“需要”被传递到
mod1
?我发现分析有缺陷。你不能在
mod2
(定义对象的地方)中编写一个例程,从对象的特定成员上调用
mod1
中的例程吗?在子例程中,
external::func
也恰好是类对象的一部分,因此它看起来类似于
call func(this,x1,x2)
。我想我在想,在其他语言中,类是如何从一个总体对象类继承的,因为子程序驱动程序除了将对象传递给
func
之外,实际上并不处理对象,其目标是传递使用Obj1(或一些变量,取决于mod1)的某个指定接口(例如,对于Runge Kutta)的函数作为内部数据?