调用特定函数时的不可分类语句

时间:2013-03-02 10:33:13

标签: compilation fortran

我想在我的代码中添加一个函数来计算一些变量。我创建了一个虚拟函数

  double precision FUNCTION rawSE(x)
  double precision x
  real ax
  rawSE = 0.0d0
  return
  END

我用

来称呼它
  selfE=rawSE(1.0d0)

当我尝试编译代码时,我在标题中收到错误。当我用值(1.0d0)替换rawSE时,我没有收到错误。当我用另一个函数替换它时,我没有收到错误。我复制了一个正常工作并重命名的函数。我收到了错误。

那么......这里发生了什么?这不是列位置问题(至少不是一个简单的问题),因为它们都是从同一行开始的。

如何解决这个问题?

2 个答案:

答案 0 :(得分:0)

rawSE函数在模块中声明,并且期望值而不是函数。将声明移出模块部分解决了这个问题。

答案 1 :(得分:0)

我问您是否在使用它的程序中声明了rawSE,并且您回复说您将其声明为double precision。你的意思是你在模块和使用模块的程序中声明了这个功能吗?喜欢这个?

module my_stuff

implicit none

contains

double precision FUNCTION rawSE(x)
  double precision x
  rawSE = 2.0d0 * x
  return
end FUNCTION rawSE

end module my_stuff


program test_rawSE

use my_stuff

implicit none

double precision rawSE   ! <-- This line

write (*, *) rawSE (2.0d0)

end program test_rawSE

如果是这样,那就是问题所在。您应该声明该函数一次,因此应删除“This line”行。保留模块更好,因为这使得接口对编译器是显式的。它不仅“知道”函数返回是双精度,它还“知道”函数具有单个双精度参数。这使它能够检查调用的参数以确保与这些属性的一致性。

P.S。 gfortran 4.1真的很老了,已经过时了。更新版本得到了很大改进。这可能就是为什么错误信息是神秘的。 gfortran 4.7确定两个陈述相互冲突:

double precision rawSE
                      1
rawSE.f90:18.4:

use my_stuff
    2
Error: Symbol 'rawse' at (1) conflicts with symbol from module 'my_stuff', use-associated at (2)