返回类型不匹配调用函数

时间:2018-11-13 15:56:03

标签: fortran

我有一个fortran.f文件,希望在Linux中进行编译。我不知道我在做什么错。我的子程序中出现以下错误:

<youtube data-id="M7lc1UVf-VE"></youtube>
const video = document.querySelector("youtube");

我的子例程:

VHImpUmat.f:476:20:

  sv%Fm = get_Fm(T)                                                 !     $F_M(\Tb)$ limit stress obliquity (depends on $\theta$)
               1
Error: Return type mismatch of function ‘get_fm’ at (1) (UNKNOWN/REAL(8))
AVHImpUmat.f:476:14:

  sv%Fm = get_Fm(T)                                                 !      $F_M(\Tb)$ limit stress obliquity (depends on $\theta$)
          1
Error: Function ‘get_fm’ at (1) has no IMPLICIT type

1 个答案:

答案 0 :(得分:0)

在子例程中,您有语句implicit none。这非常好,被认为是良好的编程习惯。

有了这个,您必须像声明变量一样,特别声明任何具有返回类型的用户函数。

我们真的看不到sv%Fm是什么类型的变量,因为它可能是在您使用的那些模块之一中定义的。为了回答问题,可以说sv的Fm组件是real(8)(错误消息中的提示):您可以这样声明函数:

real(8) :: get_fm

您将在其余变量声明的顶部进行此操作。

第二条错误消息Error: Function ‘get_fm’ at (1) has no IMPLICIT type本质上告诉您在没有隐式类型输入时,您没有声明函数的返回类型。

第一条错误消息Error: Return type mismatch of function ‘get_fm’ at (1) (UNKNOWN/REAL(8))始终列出2种类型。第一种是使用程序单元中的,第二种是函数本身中的返回值类型。由于您没有在子例程中声明该函数,因此它会报告该函数“未知”。例如,如果您不小心将其声明为整数函数,则该函数将在其中具有(integer / real(8)),这对类型不匹配的说法更加不言自明。

因此添加1声明会使两个错误都消失。