rawSE
それを使用するプログラムで宣言したかどうかを尋ねたところ、 として宣言したと答えましたdouble precision
。モジュールとモジュールを使用するプログラムの両方で関数を宣言するということですか? このような?
module my_stuff
implicit none
contains
double precision FUNCTION rawSE(x)
double precision x
rawSE = 2.0d0 * x
return
end FUNCTION rawSE
end module my_stuff
program test_rawSE
use my_stuff
implicit none
double precision rawSE ! <-- This line
write (*, *) rawSE (2.0d0)
end program test_rawSE
もしそうなら、それが問題です。関数は一度宣言する必要があるため、「この行」という行は削除する必要があります。モジュールを保持することをお勧めします。これにより、インターフェイスがコンパイラに対して明示的になるからです。関数の戻り値が倍精度であることを「認識」するだけでなく、関数が単一の倍精度引数を持っていることも「認識」します。これにより、これらのプロパティとの一貫性について呼び出しの引数をチェックできます。
PS gfortran 4.1 は本当に古くて時代遅れです。最近のバージョンは大幅に改善されています。そのため、エラー メッセージが不可解である可能性があります。gfortran 4.7 は、2 つのステートメントが互いに競合することを識別します。
double precision rawSE
1
rawSE.f90:18.4:
use my_stuff
2
Error: Symbol 'rawse' at (1) conflicts with symbol from module 'my_stuff', use-associated at (2)