Здравствуйте, я пытаюсь освоить объектно-ориентированное программирование с использованием Fortran (все мои коды написаны на Fortran 90), я частично знаю C ++, но я хочу продолжать использовать Fortran.
В Fortran вы делаете классы, используямодули.При написании оператора integer, parameter :: dp = selected_real_kind(15,307)
я сталкиваюсь с ошибками компиляции.Вот мой академический код.Это короткий код, который использует Абстрактные классы
module class_Rectangle
implicit none
integer, parameter :: dp = selected_real_kind(15,307)
type Rectangle
real(dp) :: a,b
end type Rectangle
contains
subroutine area_rectangle(area,info)
implicit none
real(dp), intent(out) :: area
type(Rectangle), intent(in) :: info
area = info%a * info%b
end subroutine area_rectangle
end module class_Rectangle
program Main
use class_Rectangle
use class_Circle
implicit none
integer, parameter :: dp = selected_real_kind(15,307)
interface compute_area
module procedure area_rectangle, area_circle
end interface compute_area
type(Rectangle) :: geoA
type(Circle) :: geoB
real(dp) :: area
geoA = Rectangle(2.0d0,4.0d0)
call area_rectangle(area,geoA)
write(*,*) 'Rectangle area:', area
geoB = Circle(1.0d0)
call area_circle(area,geoB)
write(*,*) 'Circle area:',area
end program Main
Сообщение, которое компилятор возвращает мне, выглядит следующим образом:
integer, parameter :: dp = selected_real_kind(15,307)
1
Ошибка: имя 'dp' в (1) является неоднозначнымссылка на 'dp' из модуля 'class_rectangle' Main.f90: 81.13:
real(dp) :: area
1
Ошибка: имя 'dp' в (1) является неоднозначной ссылкой на 'dp' из модуля 'class_rectangle' Main.f90: 84.30:
Любые намеки или советы приветствуются.