Fortran类型不匹配错误 [英] Fortran type mismatch error
本文介绍了Fortran类型不匹配错误的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
参数'p1'中的类型不匹配在(1 );将REAL(4)传递给TYPE(point)
,我似乎无法找出错误发生的位置。
我尝试过定义不同的变量来传递给每个函数,而不是p1和p2,但是有相同的错误。任何想法?
MODULE PointType
类型点
REAL :: x
REAL :: y
END TYPE
CONTAINS
功能arePointsEqual(p1,p2)
REAL :: arePointsEqual
TYPE(POINT ),INTENT(IN):: p1
TYPE(POINT),INTENT(IN):: p2
LOGICAL :: isEqual
IF(p1%x == p2%x .AND。 p1%y == p2%y)THEN
isEqual = .TRUE。
ELSE
isEqual = .FALSE。
END IF
END FUNCTION
功能arePointsNotEqual(p1,p2)
REAL :: arePointsNotEqual
TYPE(POINT),INTENT(IN):: p1
TYPE(POINT),INTENT(IN):: p2
LOGICAL :: isNotEqual
IF(p1%x == p2%x .AND。p1%y = = p2%y)THEN
isNotEqual = .FALSE。
ELSE
isNotEqual = .TRUE。
END IF
END FUNCTION
函数distance(p1,p2)
REAL :: distance
类型(点),INTENT(IN):: p1
TYPE(POINT),INTENT(IN):: p2
distance = SQRT((p2%x - p1%x)** 2 +(p2%y - p1%y)** 2 )
结束功能
结束单元
!下面的主程序
程序Project3
USE PointType
PRINT *,arePointsEqual(p1,p2)
PRINT *,arePointsNotEqual(p1,p2)
PRINT *,distance(p1, p2)
结束程序Project3
解决方案
<提示:尝试隐含无。总是一个好主意。
In this fortran program I've been given and told to debug, I'm getting the error:
"type mismatch in argument 'p1' at (1); passed REAL(4) to TYPE(point)"
and I can't seem to figure out where the error is occuring. I've tried defining different variables to pass to each function instead of p1 and p2 with the same error. Any ideas?
MODULE PointType
TYPE POINT
REAL:: x
REAL:: y
END TYPE
CONTAINS
FUNCTION arePointsEqual(p1, p2)
REAL:: arePointsEqual
TYPE(POINT), INTENT(IN):: p1
TYPE(POINT), INTENT(IN):: p2
LOGICAL :: isEqual
IF ( p1%x == p2%x .AND. p1%y == p2%y) THEN
isEqual = .TRUE.
ELSE
isEqual = .FALSE.
END IF
END FUNCTION
FUNCTION arePointsNotEqual(p1,p2)
REAL:: arePointsNotEqual
TYPE(POINT), INTENT(IN):: p1
TYPE(POINT), INTENT(IN):: p2
LOGICAL :: isNotEqual
IF ( p1%x == p2%x .AND. p1%y == p2%y) THEN
isNotEqual = .FALSE.
ELSE
isNotEqual = .TRUE.
END IF
END FUNCTION
FUNCTION distance(p1, p2)
REAL:: distance
TYPE(POINT), INTENT(IN):: p1
TYPE(POINT), INTENT(IN):: p2
distance = SQRT((p2%x - p1%x)**2 + (p2%y - p1%y)**2)
END FUNCTION
END MODULE
!MAIN PROGRAM BELOW THIS LINE
PROGRAM Project3
USE PointType
PRINT *, arePointsEqual(p1, p2)
PRINT *, arePointsNotEqual(p1, p2)
PRINT *, distance(p1, p2)
END PROGRAM Project3
解决方案
Hint: try "implicit none". Always a good idea.
这篇关于Fortran类型不匹配错误的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文