2014-10-21 3 views
3

^를 사용하여 두 벡터의 외적을 구현하고 있는데, 오류가 발생했습니다. 문제를 해결하는 방법을 알지 못합니다. 여기 포트란 연산자

이 내가 사용 얻고 해당 errer 인 코드

Interface Operator (^) 
    Module Procedure vector_cross_product 
End Interface Operator (^) 

Contains 

Function vector_cross_product (u, v) Result (w) 

    !!$ Input 
    Type (Vector), Intent(in) :: u, v 

    !!$ Output 
    Type (Vector) :: w 

    w% x = (u% y * v% z) - (u% z * v% y) 
    w% y = (u% z * v% x) - (u% x * v% z) 
    w% z = (u% x * v% y) - (u% y * v% x) 

End Function vector_cross_product 

입니다 gfortran

Interface Operator (^) 
        1 
Error: Syntax error in generic specification at (1) 
lib/vectors.f:110.18: 

    Module Procedure vector_cross_product 
        1 
Error: MODULE PROCEDURE at (1) must be in a generic module interface 
lib/vectors.f:111.3: 

End Interface Operator (^) 
    1 
Error: Expecting END MODULE statement at (1) 
+0

이 있습니다 달라야합니다 이러한 제한에 대한 이유. 그들은 Fortran 2015를 사용하지 않으므로 고정 소스 형식으로 이동하지 못합니다. –

답변

5

난 그렇게 믿어 같은 ^, 때와 같이 임의의 기호를 사용 밖으로 표준 규칙, 연산자를 정의합니다. 2008 표준의 초안에서 I는 7.1.6.1.4 상태

이진 정의 동작 손 파라에있는 폼의 X1을 갖는 동작이다 확정 이진 연산 X2 또는 X1 극한 연산자 X2 및 함수 및 일반 인터페이스에 의해 으로 정의됩니다.

정의 된 이진 조합 예 .cross. 또는 .times.위한 정지 사이의 문자들의 시퀀스이며, 극한 연산자는 언어 규격 (+, <, * 등)에 정의 된 연산자의 하나 인 .

@francescalus에 의해 Prodded

, 나는 순서가 더 이상 63 자 이하 여야한다는 것을 추가 안 및 고유 운영자의 (예를 들어 .eq) 또는 논리 리터럴 (예 : .true.)

+2

[7.1.2.8.에서 R723에 의해 정의 된 시퀀스] – francescalus