选择类型:无法调用仅在派生类型中定义的子例程吗?

时间:2019-02-10 12:38:20

标签: oop fortran derived-types

我最近开始与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

0 个答案:

没有答案