【问题标题】:Fortran type mismatch errorFortran 类型不匹配错误
【发布时间】:2012-11-21 05:28:33
【问题描述】:

在这个 fortran 程序中,我被告知要调试,但出现错误:

“参数 'p1' 在 (1) 处的类型不匹配;将 REAL(4) 传递给 TYPE(point)”

我似乎无法弄清楚错误发生在哪里。 我尝试定义不同的变量来传递给每个函数,而不是 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

【问题讨论】:

  • 您既没有声明p1p2,也没有赋予它们有意义的值。如果没有IMPLICIT NONE,编译器会隐式生成p1p2 类型为REAL,因此会出现错误。

标签: types compiler-construction fortran real-datatype


【解决方案1】:

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

【讨论】:

  • 好吧,你应该给它一个明确的类型,即声明它的类型。
猜你喜欢
  • 2014-10-05
  • 1970-01-01
  • 2014-09-12
  • 2013-01-16
  • 1970-01-01
  • 1970-01-01
  • 2014-02-05
  • 2018-06-08
相关资源
最近更新 更多