我使用英特尔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
答案 0 :(得分:3)
这是一段可怕的代码......
问题的原因是程序中的名称g
仅与名为g
的函数的名称相关。您还没有告诉编译器它们是相同的东西,而是由运行时连接它们。因为您使用了隐式类型,所以在名为g
的程序范围内的类型为real
。但是,名为g
的函数会返回real*8
值,直接导致您看到的错误消息。
解决此问题:
implicit none
。然后清除出现的错误。g
的显式接口。执行此操作的简单方法是将end program
语句移动到源文件的末尾,并在其位置写入单词contains
。这将使编译器知道名称g
引用该函数而不是您未声明的某个变量。放弃使用非标准real*8
( etc )。一个选项
这将是使用 - 关联标准模块iso_fortran_env
用
use, intrinsic :: iso_fortran_env
program
语句和implicit none
之间然后就可以了 为你的声明使用预定义的类型;
real(real64) :: g0
可能还有更多,但现在已足够了。