5

Fortran 関数から型を返そうとしています。これがコードです。

module somemodule
implicit none
! define a simple type
type sometype
   integer :: someint
end type sometype
! define an interface 
interface
   ! define a function that returns the previously defined type
   type(sometype) function somefunction()
   end function somefunction
end interface
contains
end module somemodule

gfortran (4.4 & 4.5) では、次のエラーが発生します。

エラー: (1) の関数 'somefunction' の型にアクセスできません

ファイルを次のようにコンパイルしました。

gfortran -c ./test.F90

タイプを明示的に公開しようとしましたが、それは役に立ちませんでした。somefunction の ac バージョンを使用する予定だったので、インターフェイス セクションに入れました。

タイプにアクセスできないのはなぜですか?

4

2 に答える 2

7

関数定義内にインポートを追加すると、これが修正されます。多くの人が言語の設計上の誤りと考えているため、定義はインターフェイス内で継承されません。「インポート」はこれをオーバーライドして、適切な動作を実現します。

interface
   ! define a function that returns the previously defined type
   type(sometype) function somefunction()
   import
   end function somefunction
end interface
于 2012-01-06T00:05:23.087 に答える
3

なぜアクセスできないのかという質問への答えは、標準委員会がそのように設計したということです。インターフェイスには、囲んでいるモジュールとは別のスコープがあるため、そこから名前を明示的にインポートする必要があります。明らかに (?) モジュールをそれ自体の中に入れることはできないuseため、importステートメントが必要です。

于 2012-01-06T00:06:30.823 に答える