2012-04-18 22 views
0

多態性をFortranで使用しようとしていますが、型の割り当てに問題があります。私はどのようにこの作品を理解することはできません。インテルコンパイラは、このエラーを投げた:ここPolymoprhic Variable Fortranでの割り当て型

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 

はここに何が間違っているのですか?

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

答えて

2

paramclass(*)と宣言することで、無制限のポリモーフィックオブジェクトが宣言されます。これらは通常の方法で参照することはできません。実際の引数、ポインタまたはポインタ割り当てのターゲット、またはselect typeステートメント(16.3.1、Fortran 95/2003の説明、MetcalfとReid)のセレクタとしてのみ使用できます。 (コンパイルとの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 

あなたが意図したように、これを行うためには、あなたはparamこの方法を宣言する必要があります

関連する問題