Fortran 90과 Intel 컴파일러를 사용하고 있습니다. 서브 루틴에서 함수를 사용하는 것이 매우 혼란 스럽습니다. 내 코드 (나는 중요하지 않은 모든 것을 삭제)입니다 :오류 # 6404 :이 이름에는 형식이 없으며 서브 루틴에서 명시 적 형식의 함수를 사용해야합니다.
program test
INTEGER :: seed=5
REAL :: nor_ran_number1, nor_ran_number2
CALL Box_Muller_transform(seed,nor_ran_number1,nor_ran_number2)
end program test
double precision function grnd(SEED)
grnd=5
return
end
SUBROUTINE Box_Muller_transform (seed,nor_ran_number1,nor_ran_number2)
implicit none
INTEGER, INTENT(in) :: seed
REAL, INTENT(out) :: nor_ran_number1, nor_ran_number2
nor_ran_number1 = grnd(seed)
nor_ran_number2 = grnd(seed)
end SUBROUTINE Box_Muller_transform
컴파일러 반환 : 나는 this을 발견하고 함수 "대학원"가 "Box_Muller_transform"내부의 보이지 않는 것을 이해
error #6404: This name does not have a type, and must have an explicit
type. [GRND]
nor_ran_number1 = grnd(seed)
------------------^
. 그러나는 다음 코드가 같은 오류가 발생하는 기대 :
program test
INTEGER ::a=5, b
call sub(a,b)
write(*,*) b
end program
SUBROUTINE sub(a,b)
INTEGER, INTENT(in) ::a
INTEGER, INTENT(out) ::b
b = fun(a)
end subroutine sub
function fun(a)
INTEGER :: fun
INTEGER :: a
fun = a*a
end function fun
을하지만이 노력하고 있습니다. 누군가가 차이점을 지적하고이 문제를 해결하는 가장 간단한 방법을 설명하면 매우 행복 할 것입니다.
모듈 내부에 함수와 서브 루틴을 배치하여 전체 호스트 오류를 해결할 수 있습니다. – jlokimlin