FORTRAN 错误 #6404:该名称没有类型,并且必须具有显式类型

发布于 2024-12-20 18:16:53 字数 697 浏览 2 评论 0原文

我是 FORTRAN 新手,收到此错误 #6404。

my_file.f(11): error #6404: This name does not have a type, and must have an explicit type.
[POTENCIAL]      d=POTENCIAL(1.0,1.0,1.0,1.0,1.4,1.4)

这是 ifort 编译器的问题,我希望这不是编译器错误。

有什么想法我错了吗?

  program iiuu
  implicit none
  REAL*8 d
  d=POTENCIAL(1.0,1.0,1.0,1.0,1.4,1.4)
  write(*,*) 'potential=', d
  END program iiuu

  FUNCTION POTENCIAL(R1,R2,R3,R4,R5,R6)
  REAL*8 R1,R2,R3,R4,R5,R6,V2,V3,V4
  DIMENSION R(6)
  R(1)=R1
  R(2)=R2
  R(3)=R3
  R(4)=R4
  R(5)=R5
  R(6)=R6
  V2=V2BODY(R)
  V3=V3BODY(R)
  V4=V4BODY(R)
  POTENCIAL=V2+V3+V4+VADD(R)
  RETURN
  END

  FUNCTION V2BODY(R)
  .....
  .....

I'm new to FORTRAN, and getting this error #6404.

my_file.f(11): error #6404: This name does not have a type, and must have an explicit type.
[POTENCIAL]      d=POTENCIAL(1.0,1.0,1.0,1.0,1.4,1.4)

This is with the ifort compiler, and I hope it is not a compiler bug.

Any ideas where I'm wrong?

  program iiuu
  implicit none
  REAL*8 d
  d=POTENCIAL(1.0,1.0,1.0,1.0,1.4,1.4)
  write(*,*) 'potential=', d
  END program iiuu

  FUNCTION POTENCIAL(R1,R2,R3,R4,R5,R6)
  REAL*8 R1,R2,R3,R4,R5,R6,V2,V3,V4
  DIMENSION R(6)
  R(1)=R1
  R(2)=R2
  R(3)=R3
  R(4)=R4
  R(5)=R5
  R(6)=R6
  V2=V2BODY(R)
  V3=V3BODY(R)
  V4=V4BODY(R)
  POTENCIAL=V2+V3+V4+VADD(R)
  RETURN
  END

  FUNCTION V2BODY(R)
  .....
  .....

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

呢古 2024-12-27 18:16:53

不,这不是编译器错误。这是对代码的编辑,至少有机会编译:

program iiuu
  implicit none
  REAL*8 d
  d=POTENCIAL(1.0d0,1.0d0,1.0d0,1.0d0,1.4d0,1.4d0)
  write(*,*) 'potential=', d

  contains

  real*8 FUNCTION  POTENCIAL(R1,R2,R3,R4,R5,R6)
  REAL*8 R1,R2,R3,R4,R5,R6,V2,V3,V4
  real*8, DIMENSION(6) :: R
  R(1)=R1
  R(2)=R2
  R(3)=R3
  R(4)=R4
  R(5)=R5
  R(6)=R6
  V2=V2BODY(R)
  V3=V3BODY(R)
  V4=V4BODY(R)
  POTENCIAL=V2+V3+V4+VADD(R)
  END function potencial

  END program iiuu
  1. 您的潜在函数没有返回类型(这是您遇到的原始错误消息)
  2. 它没有返回任何内容(return 语句不是必需的)
  3. 在调用点编译器不知道在哪里查找该函数。将函数打包到 modules 中并use 它们,或者使用 contains 语句,如上面的示例中
  4. 1.0 是单精度。使用 1.d0 告诉编译器这是一个双精度数字
  5. 到底为什么要发送六个数字而不是使用数组作为 potencial 函数的参数?

No, it is not a compiler bug. Here's an edit of your code which has at least a chance of compiling:

program iiuu
  implicit none
  REAL*8 d
  d=POTENCIAL(1.0d0,1.0d0,1.0d0,1.0d0,1.4d0,1.4d0)
  write(*,*) 'potential=', d

  contains

  real*8 FUNCTION  POTENCIAL(R1,R2,R3,R4,R5,R6)
  REAL*8 R1,R2,R3,R4,R5,R6,V2,V3,V4
  real*8, DIMENSION(6) :: R
  R(1)=R1
  R(2)=R2
  R(3)=R3
  R(4)=R4
  R(5)=R5
  R(6)=R6
  V2=V2BODY(R)
  V3=V3BODY(R)
  V4=V4BODY(R)
  POTENCIAL=V2+V3+V4+VADD(R)
  END function potencial

  END program iiuu
  1. Your potencial function did not have a return type (which is the original error message you came across)
  2. It did not return anything (return statement was not necessary)
  3. At the call point compiler had no idea where to look for the function. Either package your functions into modules and use them, or use contains statement, like in the example above
  4. 1.0 is single-precision. Use 1.d0 to tell the compiler it's a double precision number
  5. Why on earth do you send six numbers instead of having an array as an argument of the potencial function?
婴鹅 2024-12-27 18:16:53

我让它工作了。
只是将其更改为正确的数据类型表示。
其余的还是一样。

program iiuu
IMPLICIT none
REAL*8 d, POTENCIAL
d=POTENCIAL(1.0d0,1.0d0,1.0d0,1.0d0,1.4d0,1.4d0)  
write(*,*) 'potential=', d
END program iiuu

FUNCTION POTENCIAL(R1,R2,R3,R4,R5,R6)
IMPLICIT REAL*8(A-H,O-Z)
DIMENSION R(6)
R(1)=R1
R(2)=R2
......
......

I got it to work.
Just changed it to correct data type representation.
The rest still the same.

program iiuu
IMPLICIT none
REAL*8 d, POTENCIAL
d=POTENCIAL(1.0d0,1.0d0,1.0d0,1.0d0,1.4d0,1.4d0)  
write(*,*) 'potential=', d
END program iiuu

FUNCTION POTENCIAL(R1,R2,R3,R4,R5,R6)
IMPLICIT REAL*8(A-H,O-Z)
DIMENSION R(6)
R(1)=R1
R(2)=R2
......
......
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文