Fortran Coder

标题: 自定义类以及module里面动态数组问题 [打印本页]

作者: 尾生    时间: 2017-5-12 23:05
标题: 自定义类以及module里面动态数组问题
求助两个问题,望解惑,十分感谢!

1.请问定义了一个type:
[Fortran] 纯文本查看 复制代码
Type :: column
        Real :: c1,c2,c3
    end type

Type (column) :: F(3),R(3)
那么F(i)-R(i)这个操作是f(i)中的c1,c2,c3与R(i)中对应的c1,c2,c3相减吗?

2.在module里面可以定义一个动态数组作为全局变量吗?
且这个动态数组在该module里只进行了allocatable的声明,没有进行allocate操作(allocate操作将在一个子程序中进行)

作者: fcode    时间: 2017-5-13 08:15
第一,F(i)-R(i) 这个操作是非法的。编译器会报错。
第二,module里可以有动态数组。(但不是全局变量,fortran没有全局变量。)
module中的变量(含动态数组),可以在所有use了该模块的程序单元之间共享数据。
module本身只能定义(allocatable),不能执行(allocate)
如果要执行,只能在子程序(或函数)里。这些子程序(或函数),可以是外部的(需要该变量为public),也可以是contains在module下的。
视频教程详解:http://v.fcode.cn/video-module.html
作者: 尾生    时间: 2017-5-13 10:06
fcode 发表于 2017-5-13 08:15
第一,F(i)-R(i) 这个操作是非法的。编译器会报错。
第二,module里可以有动态数组。(但不是全局变量,for ...

很感谢!
F(i)-R(i)这里是我表述不清楚,抱歉...
我想表达的是假如Q,F,R都是type(column)类型的变量
那么Q=F(1)-R(1)这个操作等价于
Q%c1=R(1)%c1-F(1)%c1
Q%c2=R(1)%c2-F(1)%c2
Q%c3=R(1)%c3-F(1)%c3
吗?
作者: fcode    时间: 2017-5-13 17:36
Q=F(1)-R(1) 是非法的,编译器会报错。除非你重载了减号,使其可以对type(column)进行操作。

作者: li913    时间: 2017-5-13 22:31
想要实现两个结构体相减,需要对减号操作符进行重载
http://fcode.cn/guide-61-1.html
作者: 尾生    时间: 2017-5-14 10:47
fcode 发表于 2017-5-13 17:36
Q=F(1)-R(1) 是非法的,编译器会报错。除非你重载了减号,使其可以对type(column)进行操作。
...

谢谢您!
作者: 尾生    时间: 2017-5-14 10:48
li913 发表于 2017-5-13 22:31
想要实现两个结构体相减,需要对减号操作符进行重载
http://fcode.cn/guide-61-1.html ...

嗯,感谢!




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