gpt4 book ai didi

fortran - gfortran 不编译实变量

转载 作者:行者123 更新时间:2023-12-01 22:49:21 24 4
gpt4 key购买 nike

我用 Fortran90 编写了一个简单的程序来计算三角形的面积。用户输入三角形的三边,然后程序输出面积。足够简单。

MODULE Triangle_Operations
IMPLICIT NONE
CONTAINS
FUNCTION Area(x,y,z)
REAL :: Area ! function type
REAL, INTENT( IN ) :: x, y, z
REAL :: theta, height
theta = ACOS((x**2+y**2-z**2)/(2.0*x*y))
height = x*SIN(theta); Area = 0.5*y*height
END FUNCTION Area
END MODULE Triangle_Operations

PROGRAM Triangle
USE Triangle_Operations
IMPLICIT NONE
REAL :: a, b, c, Area
PRINT *, 'Welcome, please enter the &
&lengths of the 3 sides.'
READ *, a, b, c
PRINT *, 'Triangle''s area: ', Area(a,b,c)
END PROGRAM Triangle

当我使用 gfortran gfortrantriangle1.f90 编译此文件时,这是我收到的错误:

triangle1.f90:16.25:

REAL :: a, b, c, Area
1
triangle1.f90:14.8:

USE Triangle_Operations
2
Error: Symbol 'area' at (1) conflicts with symbol from module 'triangle_operations', use-associated at (2)
triangle1.f90:19.13:

READ *, a, b, c
1
Error: Symbol 'a' at (1) has no IMPLICIT type
triangle1.f90:19.16:

READ *, a, b, c
1
Error: Symbol 'b' at (1) has no IMPLICIT type
triangle1.f90:19.19:

READ *, a, b, c
1
Error: Symbol 'c' at (1) has no IMPLICIT type

为什么变量a,b,c会抛出错误?我已明确将它们定义为实数。

最佳答案

问题是您定义了 Area 两次——一次在主程序中,一次在您导入的模块中,并且名称冲突。您可能认为需要在主程序中定义 Area 作为在没有显式接口(interface)的情况下调用函数时早期(较黑暗)时期的保留。在现代 Fortran 中,模块自动提供接口(interface),并且语句 use Triangle_operations 就足够了。

要解决您的问题,请从主程序中删除 Area 的说明,例如转

REAL :: a, b, c, Area

进入

REAL :: a, b, c

编译输出中的后续错误是有关 Area 的第一个错误的结果。整行都会失效,因此 abc 的类型声明不会被处理,这会导致编译器提示缺少类型下次遇到他们的时候。一旦您进行了上述建议的修复,这些错误就会消失。

<小时/>

如果您的目的是在主程序中使用名为 Area 的变量来存储模块函数调用的结果,则可以重命名模块符号,例如

use triangle_operations, triangleArea => Area

然后执行以下操作:

real a, b, c, Area
Area = triangleArea(a,b,c)

在你的主程序中。

关于fortran - gfortran 不编译实变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30768964/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com