24小时热门版块排行榜    

查看: 2124  |  回复: 13

575406210

银虫 (初入文坛)

[求助] 使用全局变量做实参,导致实参与虚参类型不一致

我把我遇到的问题简化一下,大概意思就是(XX是全局变量)
SUBROUTINE   FIELD(MTYPE,GMAX,G,GN,XL,XLN,DEP,EST,PO,DENS,H,S,INV,&
     &  BB,KOUT,KPOINT,RR,TSTIF,STRN,XX,NF,LAYER,NHORZ,NVERT,INPT,DW,&
     &  DT,NOUT,KDISP,TOTFR,NOPT,RATIO,DAMP,KSTRN,NAVAIL,GTYPE,DTYPE,&
     &  KST,ND,U2GMAX,FGG,FLMD,IUSE)
      IMPLICIT REAL*8 (A-H,O-Z)
      DIMENSION XX(*)
      COMPLEX*16 FLMD
      COMPLEX*16 RR,BB,TSTIF,STRN
      COMPLEX*16 OLSTRN
      COMPLEX*16 GSTAR
      COMPLEX*16 ALOAD
      COMPLEX*16 P1,P10
      COMPLEX*16 FGG
      REAL*8 NHORZ,NVERT
      REAL*8 KOUT,KBASE
      REAL*4 TIM1,TIM2
......
  IF (INPTB .NE. NF)   CALL MOTION (XX(K01),XX(K02),XX(K03),XX(K04),XX(K04),XX(K05),&         (调试后显示这一行有两个XX实参与虚参类型不一致)
     &        XX(K06),XX(K07),XX(K08),XX(K09),XX(K10),XX(K11),XX(K12),&
     &        XX(K13),XX(K14),XX(K15),DEP,DEP,KBASE,NBASE,DAMP,BB,INV,&                              (调试后显示这一行有一个XX实参与虚参类型不一致)         
     &        S,MCUT,U2GMAX,NDP,KST,NBBA,KKEY,KKP,NMBR)



SUBROUTINE MOTION (TIME1,DD,W2,ACC,ACCC,ACCMAX,TT,FR,RD,PRV,PAA,
     .   SA,SV,T,FOUAM,AAAC,XORD,YORD,KEYSPC,KOUTP,DAMP,BB,INV,S,
     .   NCUT,U2GMAX,NDP,KST,NBLKCM,KEY,NOUT,NMBR)
     IMPLICIT REAL*8 (A-H,O-Z)
      DIMENSION IDEN(:,
      ALLOCATABLE IDEN
      REAL*8 KEYSPC
      REAL*4 TIM1,TIM2
      COMPLEX*16 ACCC,AAAC,BB,DD                                     (调试后出现的错误是ACCC,BB,DD这三个变量引起的,这里声明的是复型,但是被调用为实参时使用的是全局变量,而全局变量并没有声明类型)
这种问题我该怎么解决呢?请大家帮帮我。谢谢了。
回复此楼
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
回帖支持 ( 显示支持度最高的前 50 名 )

575406210

银虫 (初入文坛)

求大婶帮忙看一下,谢谢了
2楼2015-09-04 09:01:02
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

红日520

金虫 (小有名气)

那就得弄清楚到底需要什么变量了,不改会出错,所以还是得改呀

发自小木虫Android客户端

» 本帖已获得的红花(最新10朵)

12楼2015-09-07 22:26:40
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
普通回帖

575406210

银虫 (初入文坛)

求帮助!!!!
3楼2015-09-05 10:14:27
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

红日520

金虫 (小有名气)

没有看懂你的问题。实参虚参不是应该声明和调用时保持一致吗?另外还要注意那个implicit

发自小木虫Android客户端
4楼2015-09-05 13:28:51
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

575406210

银虫 (初入文坛)

引用回帖:
4楼: Originally posted by 红日520 at 2015-09-05 13:28:51
没有看懂你的问题。实参虚参不是应该声明和调用时保持一致吗?另外还要注意那个implicit

IF (INPTB .NE. NF)   CALL MOTION (XX(K01),XX(K02),XX(K03),XX(K04),XX(K04),XX(K05)这一行中XX(K01),XX(K02),XX(K03),XX(K04),XX(K04),XX(K05)有两个变量和子程序MOTION中的两个虚参类型不一致,并且XX是全局变量(没有声明类型),我现在该怎么改,才能让类型一致?
5楼2015-09-05 14:59:19
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

红日520

金虫 (小有名气)

看一下全局变量在哪里定义De

发自小木虫Android客户端
6楼2015-09-05 17:08:55
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

红日520

金虫 (小有名气)

调用field子程序外面的程序应该有对xx的声明吧

发自小木虫Android客户端
7楼2015-09-05 17:12:05
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

575406210

银虫 (初入文坛)

引用回帖:
7楼: Originally posted by 红日520 at 2015-09-05 17:12:05
调用field子程序外面的程序应该有对xx的声明吧

program flushp
implicit real*8 (a-h,o-z)
character*80 iname,bname
character*11 fm,uf,sc,uk,bi,cdate
character*9 char,ctime
real*4 time1,time2
integer idat,idayno,isd1,isd2
external idat,idayno,maxfiles
dimension xx(
allocatable xx
data fm,uf,sc,uk/'formatted','unformatted','scratch','unknown'/
..........
以上是主程序,只是对XX声明了是可变数组,但是类型并未声明
8楼2015-09-06 10:15:49
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

红日520

金虫 (小有名气)

有的,implicit 里面已经说了开头字母为o到z的都是实数,所以xx是实数

发自小木虫Android客户端
9楼2015-09-06 11:43:39
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

红日520

金虫 (小有名气)

要么这里重新把xx声明为复数,要么修改子程序,改为实数,使它们保持一致

发自小木虫Android客户端
10楼2015-09-06 11:46:34
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 575406210 的主题更新
信息提示
请填处理意见