错误#7977:函数引用与其定义之间的类型不匹配

时间:2014-02-04 12:50:22

标签: visual-studio-2008 fortran90

我使用英特尔Visual Fortran 11.1.048在Visual Studio 2008中运行.f90资源文件。您可以在下面看到测试代码。

运行后我得到了这个奇怪的错误:“函数引用的类型与函数定义的类型不匹配。[G]”我试图找出它,但没有。我做错了什么或者软件有问题。有人可以帮忙吗?

Program TEST

real*8,Dimension(10) :: z, f_x
real*8 a

a = 2.0
z(1) = 0.0

    do i = 2,10
        z(i) = 1 + z(i-1)
    end do

    do i=1,10
        f_z(i)= a*g(z(i))
    end do

End program TEST


    FUNCTION g(z)


    Real*8 z, g0, g
    g0=1

    g=g0*cos(z)
    return
    END FUNCTION g

1 个答案:

答案 0 :(得分:3)

这是一段可怕的代码......

问题的原因是程序中的名称g仅与名为g的函数的名称相关。您还没有告诉编译器它们是相同的东西,而是由运行时连接它们。因为您使用了隐式类型,所以在名为g的程序范围内的类型为real。但是,名为g的函数会返回real*8值,直接导致您看到的错误消息。

解决此问题:

  1. 在所有范围中使用显式输入。在每个程序单元的开头添加行implicit none。然后清除出现的错误。
  2. 让编译器生成函数g的显式接口。执行此操作的简单方法是将end program语句移动到源文件的末尾,并在其位置写入单词contains。这将使编译器知道名称g引用该函数而不是您未声明的某个变量。
  3. 放弃使用非标准real*8 etc )。一个选项 这将是使用 - 关联标准模块iso_fortran_env

    这样的行

    use, intrinsic :: iso_fortran_env

    program语句和implicit none之间

    然后就可以了 为你的声明使用预定义的类型;

    real(real64) :: g0

  4. 始终如一地缩进您的计划。
  5. 可能还有更多,但现在已足够了。