参数n为1时的Fortran类型不匹配将REAL(8)传递给整数(4)

时间:2018-03-11 12:56:20

标签: fortran gfortran

我遇到了一个fortran 77项目的问题(是的,我知道它很古老,但我的教授要求我们以固定形式的程序进行编程)

所以我遇到了一个子程序的问题,它应该读取一个N维Vector,它应该是一个列。这个代码看起来像:(它仍然是我的作业的早期草稿,只是试图找出如何调用子程序,如果我可以编译这个问题,其余代码将完成)

Program gauss
implicit double precision (A-H,O-Z)
!he directly asked for implicit typing 
call Vread(V(N))
end program



Subroutine Vread(V,N)
Implicit double precision (A-H,O-Z)
dimension V(N)
read(*,*) (V(I),I=1,N)
return
end

所以我的问题是:如果我尝试用gfortran gauss.exe -o gauss.f编译它,编译器将返回错误:

Type mismatch argument 'n' at(1); passed REAL(8) to Integer(4)

1 个答案:

答案 0 :(得分:3)

在您的主程序中编写

call Vread(V(N))  ! this passes a rank-1 vector with N elements

但您的子程序已声明

Subroutine Vread(V,N)  ! this requires 2 arguments

将通话更改为

call Vread(V,N)

让你的教授知道21世纪到了一个时代。另请注意,可以以固定格式编写21C Fortran。它没有多大意义,但可以让你在使用更现代的语言版本的同时发挥作用。

!he directly asked for implicit typing

我相信您所在的司法管辖区不直接支付您的学费。如果您支付费用然后需要更多,您就会被骗。