Fortran Coder

标题: 求助,关于自定义数据类型的问题 [打印本页]

作者: septem07    时间: 2014-2-11 00:57
标题: 求助,关于自定义数据类型的问题
小弟我自定义了若干数据类型,都写在module里面,但是在声明的时候很奇怪,第一个数据类型,也就是TYPE Coordinates 声明无误,但是第二个TYPE Matrix_2X2就不能声明,编译器报错,显示出现非预期的数据声明,出错语句用红色标出,求教~
[Fortran] 纯文本查看 复制代码

!====TYPE DEFINE!
MODULE DATATYPE
IMPLICIT NONE
  TYPE COORDINATES
  REAL :: X
  REAL :: Y
  END TYPE COORDINATES

  TYPE MATRIX_2X2
  REAL :: LOCAL(2,2)
  END TYPE MATRIX_2X2

  TYPE B_MATRIX
  REAL :: LOCAL(18,3)
  END TYPE B_MATRIX
END MODULE DATATYPE
PROGRAM PERSONALPROJECT
USE DATATYPE

TYPE (COORDINATES),DIMENSION(9) :: NODE_COORD
INTEGER :: I,J,K
TYPE (COORDINATES),DIMENSION(9) :: GAUSS_POINT
DO I=1,3,1
  GAUSS_POINT(I)%X=-0.7745966
    SELECT CASE(I)
      CASE(1)
         GAUSS_POINT(I)%Y=-0.7745966
      CASE(2)
         GAUSS_POINT(I)%Y=0
      CASE(3)
         GAUSS_POINT(I)%Y=0.7745966
    END SELECT
END DO
DO I=1,3,1
  GAUSS_POINT(I)%X=0
    SELECT CASE(I)
      CASE(1)
         GAUSS_POINT(I)%Y=-0.7745966
      CASE(2)
         GAUSS_POINT(I)%Y=0
      CASE(3)
         GAUSS_POINT(I)%Y=0.7745966
    END SELECT
END DO
DO I=1,3,1
  GAUSS_POINT(I)%X=0.7745966
    SELECT CASE(I)
      CASE(1)
         GAUSS_POINT(I)%Y=-0.7745966
      CASE(2)
         GAUSS_POINT(I)%Y=0
      CASE(3)
         GAUSS_POINT(I)%Y=0.7745966
    END SELECT
END DO
!=====ITERATION GAUSS AND JACOBIAN MATRIX
TYPE (MATRIX_2X2), DIMENSION(9) :: JACOBIANMATRIX !// 此处报错
END PROGRAM PERSONALPROJECT


作者: septem07    时间: 2014-2-11 02:02
问题已解决,是声明必须跟在use后面,不像c or c++,可以随用随开
作者: fcode    时间: 2014-2-11 09:42
1. 错误的原因是:声明语句必须写在所有执行语句之前。可参考 FAQ 文章:http://fcode.cn/guide-36-1.html   Q0007
2. 看了昨晚你们在群里的聊天记录,有几个误区:
   a. 不管是 C 还是 C++ 还是 Fortran,都有堆栈。堆栈是操作系统的概念,与开发应用程序的语言无关。
   b. C/C++ 允许声明语句出现在执行语句中间。这其实只是规定的不同,他们的解析都在编译时。
   c. 其实 Fortran 也可以按照 C 的去规定,但是 Fortran 语法规范没有这样做。在 module 里,前面的函数可以调用后面的函数,就说明了这一点。
   d. 声明数组时,并不申请空间。声明只是告诉编译器这是个什么东西,并不执行。数组的空间由链接时直接写入可执行文件的数据段。
3. 最后,在这里发帖可插入 Fortran 代码,显示为高亮。点发帖编辑器上 <> 图标。这东西我花了不少精力,欢迎试用!^_^




欢迎光临 Fortran Coder (http://bbs.fcode.cn/) Powered by Discuz! X3.2