Types Fortran类型不匹配错误

Types Fortran类型不匹配错误,types,compiler-construction,fortran,real-datatype,Types,Compiler Construction,Fortran,Real Datatype,在这个fortran程序中,我被告知要调试,我得到了一个错误: 参数“p1”在(1)处的类型不匹配;已将实数(4)传递给类型(点) 我似乎不知道错误发生在哪里。 我尝试过定义不同的变量来传递给每个函数,而不是p1和p2,但都有相同的错误。有什么想法吗 MODULE PointType TYPE POINT REAL:: x REAL:: y END TYPE CONTAINS FUNCTION arePointsEqual(p1, p2) REAL:: arePointsEqual TYP

在这个fortran程序中,我被告知要调试,我得到了一个错误:

参数“p1”在(1)处的类型不匹配;已将实数(4)传递给类型(点)

我似乎不知道错误发生在哪里。 我尝试过定义不同的变量来传递给每个函数,而不是p1和p2,但都有相同的错误。有什么想法吗

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

提示:尝试“隐式无”。始终是个好主意。

提示:尝试“隐式无”。总是一个好主意。

好吧,你应该给它一个显式类型,即声明它的类型。好吧,你应该给它一个显式类型,即声明它的类型。你既没有声明
p1
p2
,也没有给它们有意义的值。如果没有
IMPLICIT NONE
,编译器会隐式生成
p1
p2
类型的
REAL
,因此出现错误。您既没有声明
p1
p2
,也没有给它们指定有意义的值。如果没有
IMPLICIT NONE
,编译器会隐式生成
p1
p2
类型的
REAL
,从而产生错误。