主题:[讨论]求助:如何在fortran的module中定义一个输出为数组的函数
mclaid
[专家分:0] 发布于 2010-11-10 20:36:00
求助:如何在fortran的module中定义一个输出为数组的函数,注意,不是子程序,而是函数。
急!!!请各位知道的大侠,发个简单的代码。。。谢谢啦
我写的一个代码
MODULE M_Matrix
USE global
IMPLICIT NONE
INTERFACE
FUNCTION M_CreatMatrix(Low,Up)
IMPLICIT NONE
REAL :: Low,Up
REAL :: M_CreatMatrix(10,20)
END FUNCTION
END INTERFACE
CONTAINS
FUNCTION M_CreatMatrix(Low,Up)
REAL :: Low,Up
REAL :: k=0.0
INTEGER i,j
DO i=1,M_DL
DO j=1,M_DR
M_CreatMatrix(j,i)=k+(Up-Low)/(REAL(M_DR)*REAL(M_DL))
k=k+1.0
END DO
END DO
RETURN
END FUNCTION
END MODULE
报错:
F:\新建文件夹\my study\实验室\fortran学习\Ex1\Ex1\M_MATRIX.F90(16): error #6404: This name does not have a type, and must have an explicit type. [M_CREATMATRIX]
F:\新建文件夹\my study\实验室\fortran学习\Ex1\Ex1\M_MATRIX.F90(16): error #6645: The name of the module procedure conflicts with a name in the encompassing scoping unit. [M_CREATMATRIX]
compilation aborted for F:\新建文件夹\my study\实验室\fortran学习\Ex1\Ex1\M_MATRIX.F90 (code 1)
最后更新于:2010-11-10 21:44:00
回复列表 (共9个回复)
沙发
yeg001 [专家分:14390] 发布于 2010-11-10 22:27:00
做module为什么还要用interface来声明接口呢?
子程序里面没有定义M_CreatMatrix属性
REAL :: k=0.0 如果你的愿意是每次进入这个函数, k都被归零的话就分开定义和赋值.
板凳
mclaid [专家分:0] 发布于 2010-11-10 22:51:00
如果不加接口,如何使M_CreatMatrix这个函数输出是一个矩阵?
我主要目的是想编M_CreatMatrix这个输出是矩阵的函数
在书上看到说输出类型是向量或矩阵的函数在编写过程中都要加接口才用了Interface
我只是想在module里编M_CreatMatrix这个输出是矩阵的函数,请问应该怎么写?
3 楼
dongyuanxun [专家分:7180] 发布于 2010-11-10 23:07:00
把module里的interface去掉
把REAL :: M_CreatMatrix(10,20)
加入contains里的function
4 楼
yeg001 [专家分:14390] 发布于 2010-11-10 23:26:00
如果你不做模块的话, 在主程序里面是要写interface的, 因为你要数组输出, 但你做module了.
5 楼
baccle [专家分:190] 发布于 2010-11-11 09:30:00
函数如果返回的是数组的话,必须要在主程序中写出显示接口,否则就报错
6 楼
baccle [专家分:190] 发布于 2010-11-11 09:31:00
error #6404: This name does not have a type, and must have an explicit type. [M_CREATMATRIX]
这个报错你不懂是什么意思吗?函数名必须得有类型声明的
7 楼
asymptotic [专家分:16630] 发布于 2010-11-11 12:35:00
深入一点,Fortran 标准 为什么 规定函数返回数组需要接口说明呢?
我们知道,Fortran 的一些子例程调用需要 explicit interface 的用法,Fortran 标准设计者这么设计的出发点是什么呢?
8 楼
mclaid [专家分:0] 发布于 2010-11-11 14:02:00
那我是想在module里做这个函数,应该怎么写啊?
9 楼
mclaid [专家分:0] 发布于 2010-11-11 14:03:00
我知道啊,但是我想让函数输出地是一个数组,要怎么声明啊?用 REAL 声明也不对啊。
我来回复