2017-11-04 192 views
0

私はFortran、特にモジュールを学んでいます。私はこの単純なコードを書いて、正弦関数の導関数を計算する必要があります:Fortranエラー:(1)で引数 'n'に型不一致があります。 REAL(4)をINTEGER(4)に渡しました

module constants 
    real, parameter::x=3.14 
    real, parameter::h=0.0001 
end module constants 

module derivata1 

contains 
    real function der1(n) 
     use constants 
     real::der 
     der=(sin(x+h)-sin(x))/h 
    end function der1 
end module derivata1 
program derivate 
    use constants 
    use derivata1 
    implicit none 
    real der1 

    print *, der1(x) 
end program derivate 

gfortranで次のエラーが発生します。

der2.f90:40.10: 

real der1 
      1 
der2.f90:38.5: 

use derivata1 
    2 
Error: Symbol 'der1' at (1) conflicts with symbol from module 'derivata1', use-associated at (2) 
der2.f90:44:15: 

    print *, der1(x) 
       1 
Error: Type mismatch in argument ‘n’ at (1); passed REAL(4) to INTEGER(4) 

私は、しかし、結果なしで、thisthis投稿を行いました。

ここで私のエラー

+0

質問に完全なエラーメッセージを投稿してください。どのコンパイラを使用しているか教えてください。これはgfortranのように見えますが、gfortranは通常、あなたが私たちに提示した部分だけよりも有用な情報を表示します。最も良いことは、実行したコマンドを含む完全な出力を表示することです。 –

+0

@VladimirF完全なメッセージを追加しました – mattiav27

答えて

0

すべての編集単位でIMPLICIT NONEを使用してください。

モジュール内にはIMPLICIT NONEが含まれていないので、引数nは暗黙的に整数であるため、それ以外の場合は宣言されていません。

また、あなたはそれが機能を外部宣言するなるため、モジュールから機能der1を使用したいプログラムの任意の

real der1 

を行うべきではありません。コンパイラはあなたが他のどこかの他の関数der1を呼び出していると思っていますが、そのモジュールにはありません。

+0

しかし、これらを単純に修正すれば、役に立たないものを作るには不十分であるというプログラムの問題はますます増えています。 – francescalus

+0

実際、この機能は完全に間違っています。モジュールの使用に関する2つのエラーだけを調べました。 –

+0

@VladimirF他に何が間違っているか教えてください。私は決して学ばないでしょう。 – mattiav27

関連する問題