Вызов функции в том же модуле в Fortran90 - PullRequest
4 голосов
/ 07 сентября 2011

Я новичок в Fortran90 и не нашел ответа на мою проблему.У меня есть модуль, написанный на Fortran, с некоторыми функциями внутри модуля.

Урезанная версия:

module vdiStringFunctions</p>

<p>interface vdiString
    module procedure vdiString1Char
  end interface</p>

<p>contains
    character (128) function vdiString1Char(CSTRING, sVar1)
      character(*), intent(in) :: CSTRING, sVar1
      character(128) :: vdiStringGeneral
      character(len=128), dimension(0:9) :: stringArray</p>

<code>  stringArray(0) = adjustl(sVar1)
  vdiString1Char= vdiStringGeneral(CSTRING, stringArray)
end function vdiString1Char

character (128) function vdiStringGeneral(CSTRING, varArray)
  character(*), intent(in) :: CSTRING
  character(len=128), dimension(0:9), intent(in) :: varArray
  vdiStringGeneral = 'bla'
end function vdiStringGeneral 
</code>

end module vdiStringFunctions

Когда я пытаюсь скомпилировать с Intel Visual Fortran XE2011 Я получаю следующую ошибку:

ошибка LNK2019: неразрешенный внешний символ _VDISTRINGGENERAL, на который ссылается функция _VDISTRINGFUNCTIONS_mp_VDISTRING1CHAR vdiStringFunctions.obj

Поскольку функция является аналогичной функциивызов vdiString1Char у меня не получается проблема.Когда я перемещаю vdiStringGeneral за пределы модуля, он компилируется без проблем.

Поскольку он должен использоваться в DLL, все функции должны находиться внутри модуля.Как я могу заставить его работать таким образом?

1 Ответ

4 голосов
/ 07 сентября 2011

Удалить объявление vdiStringGeneral в функции vdiString1Char.Интерфейс для vdiStringGeneral уже явный, потому что он определен в том же модуле.Теперь, когда у вас есть объявление, компоновщик ищет внешнюю функцию.

...