开启辅助访问 切换到窄版
搜索

Fortran Coder

 找回密码
 极速注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

[复制链接]

自定义类以及module里面动态数组问题

[Module]
尾生 发表于 2017-5-12 23:05:14 查看55 回复6 阅读模式
求助两个问题,望解惑,十分感谢!

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:29
第一,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:19
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:55
Q=F(1)-R(1) 是非法的,编译器会报错。除非你重载了减号,使其可以对type(column)进行操作。
li913 发表于 2017-5-13 22:31:24
想要实现两个结构体相减,需要对减号操作符进行重载
http://fcode.cn/guide-61-1.html
尾生  楼主 发表于 2017-5-14 10:47:50
fcode 发表于 2017-5-13 17:36
Q=F(1)-R(1) 是非法的,编译器会报错。除非你重载了减号,使其可以对type(column)进行操作。
...

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

嗯,感谢!
您需要登录后才可以回帖 登录 | 极速注册

本版积分规则 长代码粘贴

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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