- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Is it possible to call a parent procedure in a user-defined derived type?
module my_mod
implicit none
type :: parent_t
private
integer :: a = 0
contains
procedure, public :: print => print_pt
end type
type, extends(parent_t) :: my_t
contains
procedure, public :: print => print_mt
end type my_t
contains
subroutine print_pt(this)
class(parent_t), intent(in) :: this
write(*,'(i0)') this%a
end subroutine print_pt
subroutine print_mt(this)
class(my_t), intent(in) :: this
write(*,'(a)') 'My value is'
! How do I call print_pt here?
!! call this%print_pt() gives compilation error 6460
end subroutine print_mt
end module my_mod
Hopefully the above code is sufficiently explanatory. I have tried a direct call to print_pt but that gives a compiler error
error #6460: This is not a field name that is defined in the encompassing structure. [PRINT_PT]
What is the correct syntax? I'm using Version 16.0.3.207. Thanks.
Link Copied
2 Replies
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Definitely:
call this%parent_t%print()
The method name is print - if you want to invoke the underlying routine directly, that is possible too:
call print_mt(this)
or:
call print_pt(this)
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Excellent. call this%parent_t%print() works perfectly. Thanks.
Reply
Topic Options
- Subscribe to RSS Feed
- Mark Topic as New
- Mark Topic as Read
- Float this Topic for Current User
- Bookmark
- Subscribe
- Printer Friendly Page