4
作爲新的Fortran 90自由格式的,我真的想知道爲什麼下面的代碼片段的一塊是行不通的:Fortran數組不能在函數返回:不爲虛擬變量
program test2
implicit none
!!! A program to practice f90 writing.
! Define double precision data
integer, parameter :: dp = kind(1.d0)
real(dp) :: a(3), b(3)
integer :: i
a = (/(i, i=1, 3)/)
b = (/(i, i=1, 3)/)
write (*, *) m31tensorprod(a, b)
contains
function m31tensorprod(a, b)
real(dp), dimension(3), intent(in) :: a, b
real(dp), intent(out) :: m31tensorprod(3, 3)
integer :: k1, k2
forall(k1=1:3, k2=1:3)
m31tensorprod(k1, k2) = a(k1) * b(k2)
end forall
return
end function m31tensorprod
end program test2
當我嘗試通過gfortran test2.f90編譯此,它說:
test2.f90:13.4:
function m31tensorprod(a, b) 1 Error: Symbol at (1) is not a DUMMY variable
我以爲m31tensorprod
是內部函數,不需要聲明。我在哪裏做錯了?
感謝,
之間的意思,意圖(out)不適合結果。有關更多(其他)細節,請參閱http://stackoverflow.com/q/24170024/3157076。 – francescalus
@francescalus感謝您的回覆!我去參考的問題。這是否意味着:對於變量'function_name',它在內存中沒有分配地址,因此它不是指向輸出地址的虛擬變量。因此,「intent(out)」將是非法的。是對的嗎? –
「虛擬」只是表示函數的參數。在這種情況下,'a'和'b' _在功能。意圖只能爲虛擬變量指定。 – francescalus