【发布时间】:2021-02-21 05:45:12
【问题描述】:
我对 Fortran 90 完全陌生,我正在尝试了解如何将数组传递给函数。我在网上看了看,找不到任何清晰简单的例子,所以我决定在这里发布。
我希望函数能够处理任意长度的数组(数组的长度不应该是函数的参数之一)。
我尝试编写一个简单的函数示例,该函数返回数组元素的总和:
function mysum(arr)
implicit none
real, dimension(:), intent(in) :: arr
real :: mysum
integer :: i,arrsize
arrsize = size(arr)
mysum=0.0
do i=1,arrsize
mysum=mysum+arr(i)
enddo
end function mysum
program test
implicit none
real, dimension(4) :: a
real :: mysum,a_sum
call random_number(a)
print *,a
a_sum=mysum(a)
print *,a_sum
end program
当我尝试编译时,我收到以下错误:
array_test.f90:17.14:
real mysum,a_sum
1
Error: Procedure 'mysum' at (1) with assumed-shape dummy argument 'arr' must have an explicit interface
我的程序有什么问题?
【问题讨论】:
-
请使用标签fortran,Fortran 90 只是一个旧版本。我现在可以结束你的问题了......
-
这里被处理了好几次。该过程必须在模块或内部,或者必须在调用站点提供接口块。模块是首选。
-
如果你想写现代风格的 Fortran 所有程序都应该在一个模块内.
-
@VladimirF 好的,然后我将检查这些模块(和接口)。我阅读了您指出的可能重复的问题,但不幸的是,我目前的 Fortran 水平太低,无法理解如何准确地使用模块和接口的概念来解决我的问题。
-
好的,让我们对这个确切的错误消息做一个更简单的答案。
标签: function fortran fortran90