我是Fortran的新手。现在,我正在尝试制作一个简单的函数,它应该打印矩阵的系数。起初我想用矩阵做一些更有趣的事情(这就是我使用FUNCTION关键字的原因),但我不得不把它静音,因为到目前为止,"Hello world"one_answers"乘2"是我唯一能编译的程序。
这是我的代码:
PROGRAM my_program
IMPLICIT NONE
INTEGER, EXTERNAL :: print_coefs
END PROGRAM my_program
FUNCTION print_coefs(arr)
IMPLICIT NONE
REAL, INTENT(IN), DIMENSION(:) :: arr
INTEGER :: print_coefs
INTEGER :: i,j
do i = 1, size(arr, 1)
do j = 1, size(arr, 2)
print *, arr(i,j)
enddo
enddo
print_coefs = 0
END FUNCTION
所以我在编译时出现了这个错误:
错误:(1)处"size"内在的"dim"参数不是有效的维度索引。
为什么?size
不是得到矩阵维数的正确方法吗?
谢谢你的帮助。
数组arr
被声明为秩为1。因此,假设编译器指向给定size(arr,2)
的行,这不是有效的代码:它要求第二个(不存在的)维度的大小。
从函数print_coeffs
的其余部分来看,似乎希望将arr
声明为秩-2:real, intent(in), dimension(:,:) :: arr
。
然而,应该注意的是,像这样的函数(arr
是假定形状的数组)将需要调用者的显式接口。也就是说,如果你想最终从主程序调用这个函数,那么integer, external :: print_coeffs
是不够的。有关更多详细信息,请参阅SO上的其他问答,例如此处。