Fortran类型不匹配错误 [英] Fortran type mismatch error

查看:1258
本文介绍了Fortran类型不匹配错误的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在这个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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆