【问题标题】:Fortran Error: Type mismatch in argument ‘n’ at (1); passed REAL(4) to INTEGER(4)Fortran 错误:(1) 处的参数“n”中的类型不匹配;将 REAL(4) 传递给 INTEGER(4)
【发布时间】:2017-11-04 21:04:04
【问题描述】:

我正在学习 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 的帖子,但没有结果。

我的错误在哪里?

【问题讨论】:

  • 请尝试在您的问题中发布完整的错误消息。告诉我们您正在使用哪个编译器。这看起来像 gfortran,gfortran 通常会打印更多有用的信息,而不仅仅是您选择向我们展示的部分。最好的办法是显示完整的输出,包括您执行的命令。
  • @VladimirF 添加了完整信息

标签: compiler-errors fortran


【解决方案1】:

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

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

另外,你不应该做任何事情

real der1

在你想从模块中使用函数der1的程序中,因为这使得函数被声明为外部的。然后编译器认为您正在调用其他函数der1,它在其他地方,但不在该模块中。

【讨论】:

  • 然而,这个程序还有很多错误,仅仅纠正这些并不足以产生可用的东西。
  • 功能确实是完全错误的。我只检查了与模块使用有关的两个错误。
  • @VladimirF 请告诉我还有什么问题,否则我永远不会学习。
  • @mattiav27 你不要在函数中以任何方式使用函数参数n,你引用了全局参数x。您在函数中定义了一些无用的变量der,并将计算结果分配给该变量,而不是分配给函数名称der1。为什么全局参数x=3.14应该存在我不清楚,在我看来它是没用的。
猜你喜欢
  • 1970-01-01
  • 2022-01-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-11
  • 2021-07-20
  • 1970-01-01
相关资源
最近更新 更多