【发布时间】:2012-09-21 03:10:57
【问题描述】:
当我尝试在一种抽象类型中混合常规过程和延迟过程时,gfortran 会拒绝任何常规过程的调用: " 错误:在 (1) 处的类型绑定过程调用的基础对象是抽象类型 'tbody'"
type, abstract :: tBody
private
...
contains
procedure :: init => new_Body
...
procedure (contained), deferred :: PointIn
end type tBody
abstract interface
logical(LGT) pure function contained( Body, Point )
import :: tBody, tAffinePoint, LGT
class(tBody), intent(IN) :: Body
type(tAffinePoint), intent(IN) :: Point
end function contained
end interface
subroutine newCuboid( this, ... )
class(tCuboid), intent(OUT) :: this
...
call this%tBody%init( ... )
.... [gfortran halts here]
end subroutine newCuboid
有没有办法安排类型 tBody 以便我可以同时拥有抽象的延迟过程和常规的实例化过程?
【问题讨论】:
-
您的示例代码中不清楚的地方(但我假设) - 我认为 newCuboid 是一个子例程,它覆盖了 tCuboid 类型中的绑定 init,因此明显的
call this%init( ... )会递归。如果是这种情况,那么在示例代码中明确说明可能是一个想法。
标签: fortran abstract-data-type