Fortran错误:在(1)的参数'n'中键入不匹配;将REAL(4)传递给INTEGER(4)

时间:2017-11-04 21:04:05

标签: compiler-errors fortran

我正在学习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)

我关注了thisthis个帖子,但没有结果。

我的错误在哪里?

1 个答案:

答案 0 :(得分:0)

您应该在所有编译单元中使用IMPLICIT NONE

在模块内部没有IMPLICIT NONE所以参数n是隐式整数,因为它没有被声明为其他。

另外,你不应该做任何

real der1

在您希望从模块中使用函数der1的程序中,因为这会使函数声明为外部函数。然后,编译器认为您正在调用其他位置的其他函数der1,但不在该模块中。