我最近开始与Fortran一起进入OOP。我有一个类型层次结构,其中有一个抽象基类型 genericProblem 和一个派生类型 specificProblem 。 specificProblem 有一个未在 genericProblem 中定义的子例程,在我的示例中称为“ InitializeWith”。
似乎我误解了 select type 构造。我以为它是专门为这样的情况而设计的:我知道我可以期望变量 problem 属于 genericProblem 的某种(派生)类型,并且编译器应该知道“显然我属于 specificProblem 类型,现在可以对该类型进行函数调用了”。
但是我得到一个 这不是在包含结构中定义的字段名称。 错误与下面的示例,所以我可能错过了一些东西。有人可以指出我正确的方向吗?
subroutine AssignSomething(problem,rhsTarget)
class(genericProblemT), intent(in out) :: problem
class(genericProblemT), target, intent(in) :: rhsTarget
select type (lhsProblem => problem)
type is (specificProblemT)
! Try setting up the rhsProblem:
call lhsProblem%InitializeWith(rhsTarget) ! Gives an error
class default
! give error for unexpected/unsupported type
throw some error
end select
end subroutine AssignSomething