Я недавно начал погружаться в ООП с Фортраном.У меня есть иерархия типов, где у меня есть абстрактный базовый тип 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