0

私は Fortran に詳しくありません。そして、いくつかのサブルーチンを備えた一般的なインターフェースです。gfortran 4.8 は次のように不平を言っています。

(1) のジェネリック インターフェイス「sorti」内のあいまいなインターフェイス「sortic4」および「sortic」

        INTERFACE SORTI

            SUBROUTINE  SORTIC( N, IND, TBLC )
            INTEGER      , INTENT(IN   ) :: N
            INTEGER      , INTENT(INOUT) :: IND( N )
            CHARACTER*(*), INTENT(IN   ) :: TBLC( * )
            END SUBROUTINE  SORTIC

            SUBROUTINE  SORTIC4( N, IND, TBLC )
            INTEGER      , INTENT(IN   ) :: N
            INTEGER      , INTENT(INOUT) :: IND( N )
            CHARACTER*(*), INTENT(IN   ) :: TBLC( * )
            END SUBROUTINE  SORTIC4

            SUBROUTINE  SORTIC8( N, IND, TBLC )
            INTEGER(8)   , INTENT(IN   ) :: N
            INTEGER(8)   , INTENT(INOUT) :: IND( N )
            CHARACTER*(*), INTENT(IN   ) :: TBLC( * )
            END SUBROUTINE  SORTIC8

            SUBROUTINE  SORTI1( N, IND, TBL1 )
            INTEGER, INTENT(IN   ) :: N
            INTEGER, INTENT(INOUT) :: IND( N )
            INTEGER, INTENT(IN   ) :: TBL1( * )
            END SUBROUTINE  SORTI1
             ....
        END INTERFACE

コードは ioapi3.1 ライブラリ、m3utilio.f からのものです: http://www.baronams.com/products/ioapi/index.html

なにが問題ですか?

4

1 に答える 1

8

最初の 2 つのサブルーチン (SORTICおよびSORTIC4) は、仮引数の型、種類、および次元 (ランク) がまったく同じです。したがって、TKR の解像度はそれらの間で違いはありません。それらはあいまいです。ジェネリック インターフェイスで使用できるようにするには、これらの属性の一部が異なる必要があります。

2枚目と3枚目は種類が違うのでこれでOK。(デフォルトintegerの and integer(8)、kind8は移植性がありませんが、ほとんどの場合、デフォルトのものとは異なります。) 最初と 2 番目のものは同じです。

ライブラリのソースコードを調べました。私は、この汎用インターフェースは Fortran 90 以降の標準に準拠していないと結論付けています。したがって、明示的なインターフェイスのためだけに通常のインターフェイス ブロックに変更することから始めます。つまり、SORTI単語の後の名前を削除しinterface、個々のサブルーチンを直接呼び出します。

于 2014-05-23T06:34:41.123 に答える