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”必须是多态的(用 CLASS 而不是 TYPE 声明它)。否则,您对数组函数结果大小的规范是正确的 - 当您引用 pxvalues 绑定时,编译器知道函数结果的大小为 5,因为它“知道”绑定所关联的特定过程 pxvaluesreal 的接口.

于 2012-07-13T22:13:38.247 回答