Compiler errors 错误无法分配给命名常量

Compiler errors 错误无法分配给命名常量,compiler-errors,fortran,Compiler Errors,Fortran,我用Fortran编写了一个非常简单的程序: parameter(m_box=7) ! Number of urns (not a real parameter) parameter(max_dens=4) ! Maximum density computed parameter(beta=4.5) real*8 p(0:m_box*max_dens),mbeta,xnorm real*8 hist(0:m_box*(m

我用Fortran编写了一个非常简单的程序:

      parameter(m_box=7)      ! Number of urns (not a real parameter)
      parameter(max_dens=4) ! Maximum density computed
      parameter(beta=4.5)  

      real*8 p(0:m_box*max_dens),mbeta,xnorm
      real*8 hist(0:m_box*(max_dens**2),0:(max_dens*m_box)**2)
      real*8 Pi(0:(max_dens*m_box)**2)
      integer sum2,sumq
      n_balls=m_box*max_dens
      n2_balls=m_box*(max_dens**2)
      nq_balls=(m_box*max_dens)**2 
      n2half=(int(sqrt(n2_balls/2.))+1)**2       ! Valore massimo per il quale ho tutta la statistica
      mbeta=-beta
      freq=log(20.)

      xnorm=0.
      do n=0,n_balls
         p(n)=(n+1.)**mbeta    ! Urns
         xnorm=xnorm+p(n)
      enddo
      do n=0,n_balls
         p(n)=p(n)/xnorm
      enddo
      do i=0,n2_balls
      do j=0,nq_balls
         pi(i)=0
         hist(i,j)=0
      enddo
      enddo

      do n1=0,n_balls
      do n2=0,n_balls
      do n3=0,n_balls
      do n4=0,n_balls
      do n5=0,n_balls
      do n6=0,n_balls
      do n7=0,n_balls
      sum2=n1**2+n2**2+n3**2+n4**2+n5**2+n6**2+n7**2
      sumq=(n1+n2+n3+n4+n5+n6+n7)**2
      if(sum2 .le. n2_balls .and. sumq .le. nq_balls)hist(sum2,sumq)=
     &   hist(sum2,sumq)+p(n1)*p(n2)*p(n3)*p(n4)*p(n5)*                 
     &    p(n6)*p(n7)
      if((sum2 .eq. n2half) .and. (sumq .eq. nq_balls))Pi(n1)=
     &    Pi(n1)+p(n1)*p(n2)*p(n3)*p(n4)*p(n5)*
     &    p(n6)*p(n7)!*p(n8)*p(n9)*p(n10)

      enddo
      enddo 
      enddo
      enddo
      enddo
      enddo
            write(102,*)n1,Pi(n1)   
      enddo
      sumhist=0
      do i=0,n2_balls
      do j=0,nq_nqballs
        sumhist=sumhist+hist(i,j)
      if(hist(i,j).ne.0)write(100,*)i,hist(i,j)
      if(hist(i,j).ne.0)write(101,*)1.*i/m_box,-log(1d0*hist(i,j))/m_box
      enddo
      enddo
      print*,'Normalizzazione della P = ',sumhist
      end
当我编译时,我得到一个错误:

ERROR CANNOT ASSIGN TO A NAMED CONSTANT f:45:55.

我确实犯了一个愚蠢的错误,但我不知道在哪里。我很确定if语句是正确的,因为我在另一个程序中使用了它,它起了作用。

您正在混合制表符和空格。在Fortran中不能这样做,在固定格式Fortran中也不能这样做。将选项卡转换为空格后,我的编辑器中的代码是这样的:

              do n1=0,n_balls
              do n2=0,n_balls
              do n3=0,n_balls
              do n4=0,n_balls
              do n5=0,n_balls
              do n6=0,n_balls
              do n7=0,n_balls
              sum2=n1**2+n2**2+n3**2+n4**2+n5**2+n6**2+n7**2
              sumq=(n1+n2+n3+n4+n5+n6+n7)**2
              if(sum2 .le. n2_balls .and. sumq .le. nq_balls)hist(sum2,sumq)=
            &   hist(sum2,sumq)+p(n1)*p(n2)*p(n3)*p(n4)*p(n5)*                 
        &    p(n6)*p(n7)
              if((sum2 .eq. n2half) .and. (sumq .eq. nq_balls))Pi(n1)=
        &    Pi(n1)+p(n1)*p(n2)*p(n3)*p(n4)*p(n5)*
        &    p(n6)*p(n7)!*p(n8)*p(n9)*p(n10)

              enddo
          enddo     
您可以看到,第一个与符号
缩进错误

必须将所有制表符转换为空格,并且不得再次使用制表符。此外,还必须修复缩进。有几行可能太长,您必须打断它们


将编辑器设置为在按TAB键时使用空格。

哪一行是引用行?我想这应该是固定格式的源代码,所以请仔细注意您呈现的代码的格式:您可能需要进一步缩进,但实际上这不是有效的代码。请使用一些空格。代码很可怕,几乎不可读。很难检查错误。例如
if(hist(i,j).ne.0)write(100,*)i,hist(i,j)
至少应该是
if(hist(i,j).ne.0)write(100,*)i,hist(i,j)
。我会在那里放更多的空间。还可以使用空格缩进嵌套的do循环。@francescalus我认为Stackoverflow在复制粘贴时会占用几个空格,并将它们视为代码块的缩进,而不是代码块本身内部的缩进。@VladimirF是的,很可能这个代码块只需要在每行上放回四个空格。我只是不愿意在没有确认帖子所有者是否打算将其作为固定格式源(自由格式的中断继续可能是问题所在)的情况下这样做。我回滚了您的编辑。它没有使任何有用的东西,但使代码更加缩进。你的“符号”的位置完全错了。