In a previous thread I asked for help because of a circular depenendy. I solved it by using submodules. Now I want to have a type bound overloaded subroutine in a submodul.
Current status which is working fine
PROJECT.f90
MODULE mProject
IMPLICIT NONE
PRIVATE
PUBLIC :: tElement
TYPE tElement
CONTAINS
PROCEDURE, PUBLIC :: other_subroutine => other_subroutine_element
END TYPE tElement
INTERFACE
MODULE SUBROUTINE other_subroutine_element(this)
IMPLICIT NONE
CLASS(tElement), INTENT(INOUT) :: this
END SUBROUTINE other_subroutine_element
END INTERFACE
END MODULE mProject
ELMENT.f90
SUBMODULE (mProject) mElements
IMPLICIT NONE
CONTAINS
MODULE SUBROUTINE other_subroutine_element(this)
IMPLICIT NONE
CLASS(tElement), INTENT(INOUT) :: this
! doing smth here
END SUBROUTINE other_subroutine_element
END SUBMODULE
Now I want to add to tElement a overloaded type bound subroutine. How do i do that
MODULE mProject
IMPLICIT NONE
PRIVATE
PUBLIC :: tElement
TYPE tElement
CONTAINS
PROCEDURE, PUBLIC :: overloaded_subroutine => overloaded_subroutine_element
PROCEDURE, PUBLIC :: other_subroutine => other_subroutine_element
END TYPE tElement
INTERFACE overloaded_subroutine_element
MODULE PROCEDURE overloaded_sub1
MODULE PROCEDURE overloaded_sub2
END INTERFACE overloaded_subroutine_element
INTERFACE
MODULE SUBROUTINE other_subroutine_element(this)
IMPLICIT NONE
CLASS(tElement), INTENT(INOUT) :: this
END SUBROUTINE other_subroutine_element
MODULE SUBROUTINE overloaded_sub1(this, int)
IMPLICIT NONE
CLASS(tElement), INTENT(INOUT) :: this
INTEGER(4), INTENT(IN) :: int
END SUBROUTINE overloaded_sub1
MODULE SUBROUTINE overloaded_sub2(this, real)
IMPLICIT NONE
CLASS(tElement), INTENT(INOUT) :: this
REAL(8), INTENT(IN) :: real
END SUBROUTINE overloaded_sub2
END INTERFACE
END MODULE mProject
and for ELEMENT.f90
SUBMODULE (mProject) mElements
IMPLICIT NONE
CONTAINS
MODULE SUBROUTINE other_subroutine_element(this)
IMPLICIT NONE
CLASS(tElement), INTENT(INOUT) :: this
! doing smth here
END SUBROUTINE other_subroutine_element
MODULE SUBROUTINE overloaded_sub1(this, int)
IMPLICIT NONE
CLASS(tElement), INTENT(INOUT) :: this
INTEGER(4), INTENT(IN) :: int
! doing smth here
END SUBROUTINE overloaded_sub1
MODULE SUBROUTINE overloaded_sub2(this, real)
IMPLICIT NONE
CLASS(tElement), INTENT(INOUT) :: this
REAL(8), INTENT(IN) :: real
! doing smth here
END SUBROUTINE overloaded_sub2
END SUBMODULE
unfortunately this is not how its working.
PROJECT.f90(9): error #8182: The name is neither an abstract interface nor a procedure with an explicit interface. [OVERLOADED_SUBROUTINE_ELEMENT]
PROJECT.f90(9): error #8258: The procedure name in a type-bound procedure declaration should be the name of an accessible module procedure or an external procedure that has an explicit interface. [OVERLOADED_SUBROUTINE_ELEMENT]
Someone has any thoughts on this?