我问你是否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 确定两个语句相互冲突:
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)