Fortran Coder

查看: 7094|回复: 2
打印 上一主题 下一主题

[子程序] 彭国论的书里ex0836.f90报错了如何解决

[复制链接]

16

帖子

6

主题

0

精华

入门

F 币
100 元
贡献
49 点
跳转到指定楼层
楼主
发表于 2020-6-6 11:42:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
在IVF+VS环境调试出现下面这样的错误,要怎么解决?
ex0836.f90(31): error #6552: The CALL statement is invoking a function subprogram as a subroutine.   [GET_DISTANCE]

附源代码:
[Fortran] 纯文本查看 复制代码
01module constant
02  implicit none
03  real, parameter :: PI = 3.14159
04  real, parameter :: = 9.81
05end module
06module typedef
07  implicit none
08  type player
09    real :: angle
10    real :: speed
11    real :: distance
12  end type
13  end module
14   
15program ex0836
16  use typedef
17  implicit none
18  integer, parameter :: players = 5
19  type(player) :: people(players) = (/ player(30.0, 25.0, 0.0),&
20                                       player(45.0, 20.0, 0.0),&
21            player(35.0, 21.0, 0.0),&
22            player(50.0, 27.0, 0.0),&
23            player(40.0, 22.0, 0.0) &
24          /)
25  real, external :: Get_Distance ! 声明Get_Distance是个函数
26  integer :: I
27  do I=1, players
28     call Get_Distance( people(I) )  !/////// 这里出错了
29  write(*,"('Player ',I1,' =',F8.2)") I, people(I)%distance
30  end do
31  stop
32end
33! 把0~360的角度转换成0~2PI的弧度
34real function Angle_TO_Rad( angle )
35  use constant
36  implicit none
37  real angle
38  Angle_TO_Rad = angle*pi/180.0
39  return
40end
41! 由角度、切线速度来计算投射距离
42subroutine Get_Distance( person )
43  use constant
44  use typedef
45  implicit none
46  type(player) :: person
47  real rad, Vx, time
48  real, external  :: Angle_TO_Rad ! 声明Angle_TO_Rad是个函数
49  rad  = Angle_TO_Rad( person%angle )      ! 单位转换
50  Vx   = person%speed * cos(rad)           ! 水平方向速度
51  time = 2.0 * person%speed * sin(rad) / G ! 在空中飞行时间
52  person%distance = Vx * time              ! 距离 = 水平方向速度 * 飞行时间
53  return
54end
分享到:  微信微信
收藏收藏 点赞点赞 点踩点踩

836

帖子

2

主题

0

精华

大宗师

F 币
3930 元
贡献
2336 点
沙发
发表于 2020-6-6 15:15:45 | 只看该作者
external :: Get_Distance ! 声明Get_Distance是个函数

16

帖子

6

主题

0

精华

入门

F 币
100 元
贡献
49 点
板凳
 楼主| 发表于 2020-6-6 23:04:23 | 只看该作者
li913 发表于 2020-6-6 15:15
external :: Get_Distance ! 声明Get_Distance是个函数

我把您说的这句话删掉就可以了,谢谢。
您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

捐赠本站|Archiver|关于我们 About Us|小黑屋|Fcode ( 京ICP备18005632-2号 )

GMT+8, 2025-3-13 13:00

Powered by Discuz! X3.4

© 2013-2025 Comsenz Inc.

快速回复 返回顶部 返回列表