关于在具有DIMENSION
属性的其他派生类型中使用派生类型公共过程数组声明,我需要一些帮助。在我的fortran项目中,我有很多派生类型,其组件的值是整数,而这些值是大量计算的结果。在其他模块中,我还有另一个派生类型,它的整数成分是数组。我在示例代码中的意图是用来自另一个派生类型的公共过程声明数组,这是我的示例:
MODULE DERIVED_TYPE
TYPE , PUBLIC :: DT_AA
INTEGER , PRIVATE :: I_00
CONTAINS
PROCEDURE, PUBLIC :: C_I_00 => CALC_DATA_I_00
PROCEDURE, PUBLIC :: T_I_00 => TAKE_DATA_I_00
END TYPE DT_AA
PRIVATE :: CALC_DATA_I_00
PRIVATE :: TAKE_DATA_I_01
TYPE( DT_AA ) :: A_DT_AA
CONTAINS
SUBROUTINE CALC_DATA_I_00( THIS, INDX )
CLASS( DT_AA ) :: THIS
INTEGER, INTENT( IN ) :: INDX
THIS%I_00 = 4 + INDX
END SUBROUTINE CALC_DATA_I_00
FUNCTION TAKE_DATA_I_00( THIS ) RESULT( RES )
CLASS( DT_AA ) :: THIS
INTEGER :: RES
RES = THIS%I_00
END FUNCTION TAKE_DATA_I_00
END MODULE DERIVED_TYPE
MODULE DERIVED_TYPE_01
USE, NON_INTRINSIC :: DERIVED_TYPE
IMPLICIT NONE
TYPE , PUBLIC :: DT_AB
INTEGER , DIMENSION( A_DT_AA%T_I_00() ) :: SERT
END TYPE DT_AB
END MODULE DERIVED_TYPE_01
PROGRAM MAIN_PROGRAM
USE, NON_INTRINSIC :: DERIVED_TYPE
IMPLICIT NONE
CALL A_DT_AA%C_I_00(1)
END PROGRAM MAIN_PROGRAM
在编译过程结束后,我得到了以下消息:
函数TAKE_DATA_I_00
必须是纯的
这种带有派生类型的公共过程的数组声明有什么问题?
我的IDE是使用Gfortran编译器的Code :: Blocks 17.12。编译器的版本是:MinGW 6.3.0。