Intel® Fortran Compiler
Build applications that can scale for the future with optimized code designed for Intel® Xeon® and compatible processors.
Announcements
Welcome to the Intel Community. If you get an answer you like, please mark it as an Accepted Solution to help others. Thank you!

Fortran subModule for OOP methods

Masrul
Beginner
147 Views
 

Dear All:
I am trying subModule for OOP methods in Fortran as test case. Followings are code snippets:

Module:

Module declarations
    type::Car
        character(len=10)::Name
        character(len=10)::Make
        contains
          procedure::print=>Print_CarInfo
    end type Car

    interface
        module subroutine Print_CarInfo(self)
            class(Car)::self
        end subroutine
    end interface
End Module declarations

subModule:

subModule (declarations) definitions
  contains
    module subroutine Print_CarInfo(self)
        class(Car)::self
        print*,self%Name
        print*,self%Make
    end subroutine Print_CarInfo
end subModule definitions

mainProgram:

program testOOP
    use declarations
    type(Car)::MyFirstCar

    MyFirstCar%Name='MyCar'
    MyFirstCar%Make='Hyundai'
    call MyFirstCar%print()
end program testOOP

Compile Note: ifort module.f90 submodule.f90 main.f90

Error:

Undefined symbols for architecture x86_64:
  "_declarations_mp_print_", referenced from:
      _MAIN__ in iforteEEioN.o
     (maybe you meant: _declarations_mp_print_carinfo_)
ld: symbol(s) not found for architecture x86_64

But same things compiled correctly with gfortran-6 and output as expected. By the way i am using ifort-18

Thanks in Advance,

Masrul

 

 

0 Kudos
1 Reply
Lorri_M_Intel
Employee
147 Views

There's a known bug in 18.0 provoked by this line in your first program:

procedure::print=>Print_CarInfo

Unfortunately, the compiler was creating an external reference to a routine with the name "print".

This has been fixed for a future update.

          Sorry for the inconvenience --

                         --Lorri

Reply