zhan 发表于 2015-4-9 08:45:11

模块交叉引用

modula a
modula b

a use b
b use a

fortran 怎么办?


vvt 发表于 2015-4-9 09:03:25

把 a 和 b 的公共部分提取出来当做 C
然后 a use c , b use c

zhan 发表于 2015-4-9 12:43:50

vvt 发表于 2015-4-9 09:03
把 a 和 b 的公共部分提取出来当做 C
然后 a use c , b use c

还有别的办法吗?
比如C++,类的前置声明.
fortran有相应的解决方案么?
fortran2008编译能通过吗?

zhan 发表于 2015-4-9 12:50:08

具体是这样的,编译有依赖关系
module aaa
use module bbb
function geta(pb) result(aaa)
   real:: aaa
......
   type(bbb),pointer:: pb
   aaa=pb%ccc
end function geta
end module aaa

module bbb
use module aaa
type:: bbb
   real:: ccc
   .....
contains
   procedure:: getb
end type bbb
contains
function getb
   this%ccc=geta()
end function

end module bbb



pasuka 发表于 2015-4-9 12:52:28

zhan 发表于 2015-4-9 12:43
还有别的办法吗?
比如C++,类的前置声明.
fortran有相应的解决方案么?


个么请问lz,A和B的交叉部分在哪里?变量?方法?
仅仅是变量,个么2楼的建议屡试不爽,可以写module也可写头文件,编译是加-cpp选项
仅仅是方法,个么直接上C++,即使Fortran2008的OOP也太磕碜了
变量方法都有,分而治之

zhan 发表于 2015-4-10 08:47:10

fortran08有没有类前置声明?

pasuka 发表于 2015-4-10 10:51:37

zhan 发表于 2015-4-9 12:50
具体是这样的,编译有依赖关系
module aaa
use module bbb


粗略看了一下代码,为啥要分成2个互相交叉引用的module?
合并成一个或者简单继承关系的不行吗?
本质上Fortran的OOP更类似于C模拟面向对象而不是C++

pasuka 发表于 2015-4-10 11:16:48

zhan 发表于 2015-4-9 12:50
具体是这样的,编译有依赖关系
module aaa
use module bbb


粗略看了一下代码,为啥要分成2个互相交叉引用的module?
合并成一个或者简单继承关系的不行吗?
本质上Fortran的OOP更类似于C模拟面向对象而不是C++

zhan 发表于 2015-4-10 12:45:27

3Q!
我写了很多这样的模块.
用C++风格写的,现在想组合起来,遇到了编译依赖的麻烦.
想知道fortran08是不是已经可以解决这种问题.

pasuka 发表于 2015-4-10 13:03:24

zhan 发表于 2015-4-10 12:45
3Q!
我写了很多这样的模块.
用C++风格写的,现在想组合起来,遇到了编译依赖的麻烦.


08标准也没戏
熟悉C++的话,实在没必要继续搞Fortran,除非历史遗留代码
页: [1] 2
查看完整版本: 模块交叉引用