首页 >

关于 encompassing scoping unit Error 错误

作者:E2dot71828  日期:05-22
来源:Fcode研讨团队
问题:Error: The name of the module procedure conflicts with a name in the encompassing scoping unit. [CONST]


function se(x) 
  implicit none
  integer n
  real x,h,he,tx,se
  n=1
  tx=h(n)*x**(2*n)
  he=tx
  do while(abs(tx)>=1e-10)
    n=n+1
    tx=h(n)*x**(2*n)
    he=he+tx
  enddo
  se=1+he

 CONTAINS
 
  function h(n) result(k)
    implicit none
    integer i,n
    real pim,term1,term2,e,s,k
    pim=(2/3.1415926)**(2*n+1)
    term1=1
    term2=1
    e=term1/term2
    s=1
    i=1
    do while(abs(e)>=1e-10)
      i=i+1
      term1=(-1.0)**(real(i)-1)
      term2=(2*real(i)-1)**(2*n+1)
      e=term1/term2
      s=s+e
    enddo
    k=2*pim*s
  end function h
end function se

program www_fcode_cn
  implicit none
  real se,h,x
  read*,x
  print*,se(x)
end program www_fcode_cn

这个程序是错的,,出错是因为:contains里面的函数h的scoping unit定义跟主函数有冲突。

real x,h,he,tx,se,这样编译器会认为h是external的,但加上contains却又认为是internal的

有两种改法:
1,去掉声明中的h;
2,将end function se 替换掉contains,,写成2个独立的函数。

常规|工具|专业|读物|
代码|教学|算法|
首页 >
FortranCoder手机版-导航