Fortran Coder

查看: 11463|回复: 2
打印 上一主题 下一主题

[派生类型] 求助,关于自定义数据类型的问题

[复制链接]

2

帖子

1

主题

0

精华

新人

F 币
13 元
贡献
6 点
跳转到指定楼层
楼主
发表于 2014-2-11 00:57:24 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
小弟我自定义了若干数据类型,都写在module里面,但是在声明的时候很奇怪,第一个数据类型,也就是TYPE Coordinates 声明无误,但是第二个TYPE Matrix_2X2就不能声明,编译器报错,显示出现非预期的数据声明,出错语句用红色标出,求教~
[Fortran] 纯文本查看 复制代码
01!====TYPE DEFINE!
02MODULE DATATYPE
03IMPLICIT NONE
04  TYPE COORDINATES
05  REAL :: X
06  REAL :: Y
07  END TYPE COORDINATES
08 
09  TYPE MATRIX_2X2
10  REAL :: LOCAL(2,2)
11  END TYPE MATRIX_2X2
12 
13  TYPE B_MATRIX
14  REAL :: LOCAL(18,3)
15  END TYPE B_MATRIX
16END MODULE DATATYPE
17PROGRAM PERSONALPROJECT
18USE DATATYPE
19 
20TYPE (COORDINATES),DIMENSION(9) :: NODE_COORD
21INTEGER :: I,J,K
22TYPE (COORDINATES),DIMENSION(9) :: GAUSS_POINT
23DO I=1,3,1
24  GAUSS_POINT(I)%X=-0.7745966
25    SELECT CASE(I)
26      CASE(1)
27         GAUSS_POINT(I)%Y=-0.7745966
28      CASE(2)
29         GAUSS_POINT(I)%Y=0
30      CASE(3)
31         GAUSS_POINT(I)%Y=0.7745966
32    END SELECT
33END DO
34DO I=1,3,1
35  GAUSS_POINT(I)%X=0
36    SELECT CASE(I)
37      CASE(1)
38         GAUSS_POINT(I)%Y=-0.7745966
39      CASE(2)
40         GAUSS_POINT(I)%Y=0
41      CASE(3)
42         GAUSS_POINT(I)%Y=0.7745966
43    END SELECT
44END DO
45DO I=1,3,1
46  GAUSS_POINT(I)%X=0.7745966
47    SELECT CASE(I)
48      CASE(1)
49         GAUSS_POINT(I)%Y=-0.7745966
50      CASE(2)
51         GAUSS_POINT(I)%Y=0
52      CASE(3)
53         GAUSS_POINT(I)%Y=0.7745966
54    END SELECT
55END DO
56!=====ITERATION GAUSS AND JACOBIAN MATRIX
57TYPE (MATRIX_2X2), DIMENSION(9) :: JACOBIANMATRIX !// 此处报错
58END PROGRAM PERSONALPROJECT

分享到:  微信微信
收藏收藏 点赞点赞 点踩点踩

2

帖子

1

主题

0

精华

新人

F 币
13 元
贡献
6 点
沙发
 楼主| 发表于 2014-2-11 02:02:09 | 只看该作者
问题已解决,是声明必须跟在use后面,不像c or c++,可以随用随开

2038

帖子

12

主题

5

精华

论坛跑堂

臭石头雪球

F 币
1676 元
贡献
715 点

美女勋章热心勋章星光勋章新人勋章贡献勋章管理勋章帅哥勋章爱心勋章规矩勋章元老勋章水王勋章

板凳
发表于 2014-2-11 09:42:53 | 只看该作者
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 代码,显示为高亮。点发帖编辑器上 <> 图标。这东西我花了不少精力,欢迎试用!^_^
您需要登录后才可以回帖 登录 | 极速注册

本版积分规则

捐赠本站|Archiver|关于我们 About Us|小黑屋|Fcode ( 京ICP备18005632-2号 )

GMT+8, 2025-4-28 17:59

Powered by Discuz! X3.4

© 2013-2025 Comsenz Inc.

快速回复 返回顶部 返回列表