Fortran 符号已具有基本类型的字符

Fortran 符号已具有基本类型的字符,fortran,fortran90,gfortran,fortran95,Fortran,Fortran90,Gfortran,Fortran95,我在Fortran 90中有如下代码: PROGRAM TICTACTOE IMPLICIT none character (len=1), DIMENSION(3,3) :: ticTac character :: winner SUBROUTINE CHKOVR(ticTac, over, winner) character (len=1), DIMENSION(3,3) :: ticTac character :: winner logical o

我在Fortran 90中有如下代码:

PROGRAM TICTACTOE
  IMPLICIT none
  character (len=1), DIMENSION(3,3) :: ticTac
  character :: winner

  SUBROUTINE CHKOVR(ticTac, over, winner)
    character (len=1), DIMENSION(3,3) :: ticTac
    character :: winner
    logical over

  END SUBROUTINE CHKOVR
END PROGRAM TICTACTOE
我得到的错误是:

tictactoe.f90:11:2:

   SUBROUTINE CHKOVR(ticTac, over, winner)
  1
Error: Unclassifiable statement at (1)
tictactoe.f90:12:47:

     character (len=1), DIMENSION(3,3) :: ticTac
                                               1
Error: Symbol ‘tictac’ at (1) already has basic type of CHARACTER
tictactoe.f90:13:23:

     character :: winner
                       1
Error: Symbol ‘winner’ at (1) already has basic type of CHARACTER
tictactoe.f90:16:5:
我正在尝试将一些旧的fortran代码转换成更现代的fortran 90

无可否认,我在这一点上不太懂这门语言。在旧代码中,这种东西工作得很好。这里是否将
ticTac
视为全局变量,我不应该将其传递给子例程?旧代码是这样做的,但我怀疑我现在拥有的是某种全局变量


还是问题出在其他地方?

在定义内部子例程之前,缺少一条
contains
语句。这是行不通的,内部程序的概念直到“最近”才出现。你能仔细看一下运行正常的代码吗,因为子程序可能不在程序内。@francescalus你说得对,在旧程序中,
end
在子程序之前。在我的程序中,我将
结尾
放在最末尾。这绝对是一个错误。一旦我将
end
切换到子例程之前,一切正常!谢谢如果您愿意,可以将此作为答案发布,因为这解决了问题。在定义内部子例程之前,您缺少
contains
语句。这是行不通的,内部程序的概念直到“最近”才出现。你能仔细看一下运行正常的代码吗,因为子程序可能不在程序内。@francescalus你说得对,在旧程序中,
end
在子程序之前。在我的程序中,我将
结尾
放在最末尾。这绝对是一个错误。一旦我将
end
切换到子例程之前,一切正常!谢谢如果你愿意的话,可以将此作为答案发布,因为这解决了问题。