Fortran,'dim' 'size'内在的参数不是有效的维度索引



我是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上的其他问答,例如此处。

相关内容

  • 没有找到相关文章

最新更新