2012-07-13 4 views
0

이미지 값을 읽는 라이브러리를 작성하는 동안 다음과 같은 문제가 발생합니다. realimage이라는 새 유형을 정의했습니다. 이 유형 내에서 함수가 참조되며 결과로 배열을 반환합니다.유형 정의에서 호출 할 배열 값 함수

module typedefinition 
implicit none 

type realimage 
    integer  :: byteorder  = 0 
    contains 
    procedure :: initialize => initializereal 
    procedure :: pxvalues => pxvaluesreal ! Array valued function 
end type realimage 

contains 
    function pxvaluesreal(this, x, y) result(val) 
    implicit none 
    type(realimage) this 
    real val(5) 
    integer :: x, y 
    ... 
    end function 
end module 

gfortran와 모듈을 컴파일하고 image1%pxvalues(x,y)으로 함수를 호출, 나는 항상 다음과 같은 오류 메시지가 얻을 : 내가 직접 메인 프로그램 (pxvaluesreal(image1,x,y))에서 함수를 호출하는 경우

main.f95: In function ‘testtype’: 
main.f95:15: internal compiler error 

를, 모든 작동합니다.

형식 정의에서 배열 차원을 정의하여 컴파일러에 알릴 수 있습니까?이 함수는 함수의 반환 값의 차원이 아닙니까?

답변

2

내부 컴파일러 오류는 항상 컴파일러 버그로 인해 발생합니다. 최신 버전의 gfortran을 사용하고 있다면 열려있는 버그 목록을 검토하고 버그 보고서를 제출하는 것이 좋습니다.

이상 - 코드가 표준을 준수하지 않습니다. 전달 된 객체 'this'는 다형성이어야합니다 (TYPE이 아닌 CLASS로 선언). 그렇지 않으면 배열 함수 결과 크기가 정확합니다. pxvalues ​​바인딩을 참조하면 컴파일러는 바인딩이 연결된 특정 프로 시저 pxvaluesreal의 인터페이스를 '알고'있기 때문에 함수 결과의 크기가 5임을 알 수 있습니다. .