В настоящее время у меня есть структура класса, которая выглядит следующим образом:
type, public :: ClassA
type(ClassB), public :: ObjectB
type(ClassC), public :: ObjectC
end type ClassA
Итак, если я создаю ObjectA где-то еще, я также создаю ObjectB и Object C. Но я бы предпочел иметь что-то вроде
type, public :: ClassA
contains
procedure, public :: CreateObjectB
procedure, public :: CreateObjectC
end type
contains
subroutine CreateObjectB(self)
class(ClassA) :: self
type(ClassB) :: ObjectB
ObjectB%initialized = 1
end subroutine
subroutine CreateObjectC(self)
class(ClassA) :: self
type(ClassC) :: ObjectC
ObjectC%initialized = 1
end subroutine
Итак, на словах, просто иметь возможность создавать эти объекты. И затем извне я хочу создать объекты на лету:
type(ClassA) :: ObjectA
call ObjectA%CreateObjectB()
print*,ObjectA%ObjectB%intialized
Предположим, что ObjectB и Object C определены правильно (существует переменная "initialized"). В настоящее время я получаю сообщение об ошибке «Это не имя поля, которое определено в охватывающей структуре». из команды печати.
Я чувствую, что я близко, но я не могу заставить его работать. Как мне это сделать?