私は以下の関数を書いて、6つの実数パラメータを取り、1D配列を返します。このエラーは、最終除き、上記テキストで5つのエラーの合計繰り返し実数配列をコンパイルするときの型エラー。 Fortranのエラー#7113
error #7113: Each ac-value expression in an array-constructor must have the same type and type parameters. [COS]
:
FUNCTION G(a, b, c, d, e, f)
IMPLICIT NONE
! SPECIFICATION SECTION
REAL, INTENT(IN) :: a
REAL, INTENT(IN) :: b
REAL, INTENT(IN) :: c
REAL, INTENT(IN) :: d
REAL, INTENT(IN) :: e
REAL, INTENT(IN) :: f
REAL, DIMENSION(1:3) :: G
REAL, DIMENSION(3,3) :: T
REAL, DIMENSION(1:3) :: H
! EXECUTION SECTION
T = RESHAPE((/1, 0, -sin(b), &
0, cos(a), sin(a)*cos(b), &
0, -sin(a), cos(a)*cos(b)/), &
(/3,3/))
H = (/d, e, f/)
G = someOtherUnimportantFunction(H,T)
! SUBPROGRAM SECTION
END FUNCTION G
この関数は、コンパイルとRESHAPE関数呼び出しと行にエラーが発生しません4には最後に[COS]
がありません。このエラーは、1と0がtrig関数とは異なる型として解釈されていることを示唆しています。実際には、1を1.0に、0を0.0に変更すると関数が正しくコンパイルされます。しかし、私は同様のRESHAPE
を持つ同様の多くの同様の関数を持っているので、角度の正弦と余弦に加えて1と0の両方の整数型式を呼び出すので、混乱します。それらのRESHAPE
関数呼び出しはうまくコンパイルされます。なぜこのRESHAPE呼び出しが異なるのですか?
これまでのRESHAPE
コマンドは、整数をREAL値の変数に暗黙的に型変換していました。なぜこのタイプの変換は起こっていないのですか?混合整数と実数型と正しくコンパイルRESHAPEコールの
例:
U = RESHAPE((/cos(j), 0, sin(j), 0, 1, 0, -sin(j), 0, cos(j)/),(/3, 3/))
UはREAL 3×3アレイ及びjは実数値の角度です。
(...プログラマの意図ではないかもしれない)
real
が暗黙的であるため、このパターンは、「ダウンコンバート」integer
に(場合によっては)問題かもしれないと思います[この質問](https://stackoverflow.com/q/30128290)は関連していますが、確かにより重複したターゲットがあります。 – francescalus私は戻って、以前のRESHAPEの呼び出しをより詳しく見ました。私が渡したすべての配列には、 '[0または1の整数値]'と '[trigFunction(angle)] 'という形式の複数の要素が含まれていました。しかし、問題のRESHAPE呼び出しだけが整数で始まります。残りは三角関数から始まりました。したがって、私はすべての型の配列を渡さなかった。最初の要素型は、残りの要素の型変換のために重要ですか? –
コンストラクタ内のすべての要素は、 '[real :: ...]'構文が使われていない限り、同じ型と種類でなければなりません。 – francescalus