FORTRAN “Symbol has no implicit type"错误

本文探讨了在使用gfortran编译时遇到的一个常见问题——命令过长导致的错误。通过将命令拆分为多个句子并使用续行符(&),成功解决了该问题。此外,对比了gfortran与IntelFortran在这方面的差异,揭示了gfortran在处理长命令时的限制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

用gfortran编译的时候出现这个问题,查程序并无错误。


最后发现是命令太长,用续行符&拆成两个句子就可以编译通过了。在使用Intel Fortran编译并无此问题,可能是gfortran支持的单句长度比较短。

program hydrogen_atom implicit none integer, parameter :: dp = kind(0.d0) ! 双精度浮点 real(dp), parameter :: L = 100.0_dp ! 坐标范围 real(dp), parameter :: d = 0.5_dp ! 步长 integer, parameter :: N = int(L/d - 1) ! 节点数 real(dp) :: dt1, dt2, x0 real(dp) :: xs(N) ! 节点位置 real(dp) :: H(N, N) ! 哈密顿矩阵 real(dp) :: Y(N, N) ! 本征向量 real(dp) :: E(N) ! 本征值 integer :: i, j, k, iter real(dp) :: Epai(N), temp logical :: sorted ! 初始化节点 x0 = 0.0_dp do i = 1, N x0 = x0 + d xs(i) = x0 end do ! 设置动能矩阵参数 dt1 = 1.0_dp / (d*d) dt2 = -0.5_dp / (d*d) ! 初始化哈密顿矩阵 H = 0.0_dp do i = 1, N ! 对角元素 (动能 + 势能) H(i, i) = dt1 - 1.0_dp / xs(i) ! 次对角元素 (仅动能) if (i < N) then H(i, i+1) = dt2 H(i+1, i) = dt2 end if end do ! 假设 H 是 n×n 的哈密顿矩阵 integer :: k1, j1, n1 n1 = size(H, 1) ! 获取矩阵维度 print *, "哈密顿矩阵 H:" do k1 = 1, n1 do j1 = 1, n1 write(*, '(F12.6, 2X)', advance='no') H(k1, j1) ! 每元素占12字符宽,保留6位小数 end do print * ! 换行 end do更改后报错PROGRAMadd_numbers.f90:41:25: 41 | integer :: k1, j1, n1 | 1 Error: Unexpected data declaration statement at (1) PROGRAMadd_numbers.f90:46:12: 46 | do j1 = 1, n1 | 1~ Error: Symbol 'j1' at (1) has no IMPLICIT type; did you mean 'j'? PROGRAMadd_numbers.f90:45:8: 45 | do k1 = 1, n1 | 1~ Error: Symbol 'k1' at (1) has no IMPLICIT type; did you mean 'k'? PROGRAMadd_numbers.f90:42:5: 42 | n1 = size(H, 1) ! 鑾峰彇鐭╅樀缁村害 | 1~ Error: Symbol 'n1' at (1) has no IMPLICIT type; did you mean 'n'? PS D:\win_fortran>
最新发布
06-25
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值