Выберите тип: не может вызвать подпрограмму, определенную только в производном типе? - PullRequest
0 голосов
/ 10 февраля 2019

Я недавно начал погружаться в ООП с Фортраном.У меня есть иерархия типов, где у меня есть абстрактный базовый тип genericProblem и производный тип specificProblem . specificProblem имеет подпрограмму, которая не определена в genericProblem , которая в моем примере называется "InitializeWith".

Похоже, я неправильно понял тип выбора построить.Я думал, что это было сделано специально для таких случаев, когда я знаю, что я могу ожидать, что переменная problem будет иметь определенный (производный) тип genericProblem и что компилятор должен знать, что «IЯ, очевидно, типа 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...