0

Fortran でポリモーフィズムを使用しようとしていますが、型の割り当てに問題があります。これを機能させる方法がわかりません。Intel コンパイラが次のエラーをスローしました。

error #6460: This is not a field name that is defined in the encompassing structure.
analitic%param%a0=2
---------------^

最小限の例を次に示します。

program new

implicit none

integer, parameter    :: dp = kind(1.0d0)

type :: potential
  class(*),allocatable                        :: param
endtype

type(potential)          :: analitic
type  :: pa1d_param
  real(dp)     :: a0
  real(dp)     :: b0
end type

allocate(pa1d_param::analitic%param)

analitic%param%a0=2.0_dp     

end program

ここで何が問題なのですか?

ありがとうございました!

4

1 に答える 1

2

paramとして宣言することによりclass(*)、無制限のポリモーフィック オブジェクトを宣言することになります。これらは通常の方法では参照できません。実際の引数、ポインター、またはポインター割り当てのターゲットとして、またはselect typeステートメント内のセレクターとしてのみ使用できます (16.3.1、Fortran 95/2003 の説明、Metcalf および Reid)。

意図したとおりにこれを行うには、次のように宣言する必要がありますparam: (ifort 12.0.2.137 で正しい出力をコンパイルして生成します)

program new

 implicit none

 integer, parameter :: dp = kind(1.0d0)

 type pa1d_param
   real(dp) :: a0
   real(dp) :: b0
 end type pa1d_param

 type :: potential
   class(pa1d_param),allocatable :: param
 endtype

 type(potential)          :: analitic

 allocate(analitic%param)

 analitic%param%a0 = 2.0_dp

 write(*,*)analitic%param%a0

end program
于 2012-04-18T21:32:18.470 に答える