2016-08-17 72 views
-1

在我的Fortran代碼,我有命令:Fortran的調用錯誤

CALL EXPECTATION(X, 0.5D0*SIGMAZ, Z_EXPECTATION) 
WRITE(1,*) T, Z_EXPECTATION 

CALL EXPECTATION(X, 0.5D0*SIGMAY, Y_EXPECTATION) 
WRITE(4,*) T, Y_EXPECTATION 

爲此,我得到的錯誤:

Error: Symbol ‘sigmay’ at (1) has no IMPLICIT type 

Error: Symbol ‘sigmaz’ at (1) has no IMPLICIT type 

但我沒有得到任何錯誤類似的命令:

CALL EXPECTATION(X, 0.5D0*SIGMAX, X_EXPECTATION) 
WRITE(3,*) T, X_EXPECTATION 

可能是什麼問題?我呼籲來自同一子程序中的變量,我已經將它們定義爲

COMPLEX*16, DIMENSION(2,2) :: SIGMAX, SIGMAY SIGMAZ 
+0

請顯示一個更完整(但很小)的例子來重現錯誤。見[mcve]。 – francescalus

+3

請注意您的聲明似乎缺少一個逗號,這是這裏還是源代碼中的一個錯字? –

+3

並遵循d_1999的評論:您是否使用固定形式的源代碼?在那裏,這個聲明中的空格被忽略(所以你將會有一個名爲'sigmaysigmaz'的變量)。 – francescalus

回答

1

你忘SIGMAYSIGMAZ之間在聲明一個逗號。 由於Fortran不關心空格,它只創建了兩個複雜變量:SIGMAXSIGMAYSIGMAZ

只需添加逗號,您的代碼應該編譯正常。

+1

我認爲「Fortran不關心空白空間」並不準確,對於固定形式而言不是自由形式。請參閱例如[this](http://stackoverflow.com/documentation/fortran/2103/modern-alternatives-to-historic-features/11457/fixed-source-form#t=201608171315193077528)文檔主題/示例。 –

+0

有趣。我應該先測試一下。我仍然認爲缺少的逗號是錯誤,但是編譯器應該已經聲明瞭該聲明... – chw21

+1

缺失的逗號當然很重要。在自由格式的源代碼中會有語法問題,但是在固定格式中根本沒有聲明:它是一條註釋行。無論哪種方式,這個問題都不是對潛在問題的準確表述。 – francescalus