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)、常に次のエラーメッセージが表示されます。

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

メインプログラムで関数を直接呼び出すと(pxvaluesreal(image1,x,y))、すべて正常に動作します。

関数の戻り値の次元であるコンパイラーに通知するために、型定義で配列の次元を定義することは可能ですか?

4

1 に答える 1

2

内部コンパイラエラーは、常にコンパイラのバグが原因です。gfortranの最新バージョンを使用している場合は、未解決のバグのリストを確認し、おそらくバグレポートを提出することを検討する必要があります。

それを超えて-あなたのコードは標準に準拠していません-渡されたオブジェクト'this'は多形でなければなりません(TYPEではなくCLASSで宣言してください)。それ以外の場合、配列関数の結果のサイズの指定は正しいです-pxvaluesバインディングを参照すると、コンパイラは、バインディングが関連付けられている特定のプロシージャpxvaluesrealのインターフェイスを「知っている」ため、関数の結果のサイズが5であることを認識します。 。

于 2012-07-13T22:13:38.247 に答える