回 帖 发 新 帖 刷新版面

主题:[讨论]求助:如何在fortran的module中定义一个输出为数组的函数

求助:如何在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)

回复列表 (共9个回复)

沙发

做module为什么还要用interface来声明接口呢?
子程序里面没有定义M_CreatMatrix属性
REAL :: k=0.0 如果你的愿意是每次进入这个函数, k都被归零的话就分开定义和赋值.

板凳

如果不加接口,如何使M_CreatMatrix这个函数输出是一个矩阵?
我主要目的是想编M_CreatMatrix这个输出是矩阵的函数
在书上看到说输出类型是向量或矩阵的函数在编写过程中都要加接口才用了Interface

我只是想在module里编M_CreatMatrix这个输出是矩阵的函数,请问应该怎么写?

3 楼

把module里的interface去掉


把REAL :: M_CreatMatrix(10,20)
加入contains里的function

4 楼

如果你不做模块的话, 在主程序里面是要写interface的, 因为你要数组输出, 但你做module了.

5 楼

函数如果返回的是数组的话,必须要在主程序中写出显示接口,否则就报错

6 楼

error #6404: This name does not have a type, and must have an explicit type.   [M_CREATMATRIX]
这个报错你不懂是什么意思吗?函数名必须得有类型声明的

7 楼

深入一点,Fortran 标准 为什么 规定函数返回数组需要接口说明呢? 
我们知道,Fortran 的一些子例程调用需要 explicit interface 的用法,Fortran 标准设计者这么设计的出发点是什么呢?

8 楼


那我是想在module里做这个函数,应该怎么写啊?

9 楼


我知道啊,但是我想让函数输出地是一个数组,要怎么声明啊?用 REAL 声明也不对啊。

我来回复

您尚未登录,请登录后再回复。点此登录或注册