2012-04-18 4 views
0

포트란에서 다형성을 사용하려고하는데이 유형을 할당하는 데 문제가 있습니다. 나는이 일을 어떻게하는지 알 수 없다.Polymoprhic 변수에 포트를 할당하십시오.

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 

여기에 어떤 문제가 :

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

는 최소한의 예입니다 : 인텔 컴파일러는이 오류가 발생했습니다?

감사합니다.

답변

2

paramclass(*)으로 선언하면 무제한의 다형성 객체가 선언됩니다. 이것들은 정상적인 방법으로 참조 될 수 없습니다 - 포인터를 할당 할 때 실제 인수, 포인터 또는 대상으로 사용하거나 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 
관련 문제