我正在学习Fortran,特别是模块。我写了这个简单的代码,应该计算正弦函数的导数:
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)
我的错误在哪里?
答案 0 :(得分:0)
您应该在所有编译单元中使用IMPLICIT NONE
。
在模块内部没有IMPLICIT NONE
所以参数n
是隐式整数,因为它没有被声明为其他。
另外,你不应该做任何
real der1
在您希望从模块中使用函数der1
的程序中,因为这会使函数声明为外部函数。然后,编译器认为您正在调用其他位置的其他函数der1
,但不在该模块中。