使用派生类型公共过程在其他派生类型中声明数组

时间:2018-06-24 11:46:15

标签: fortran gfortran

关于在具有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。

0 个答案:

没有答案