Фортран: даже используя модуль, компилятор отвечает на ошибку # 6404 - PullRequest
0 голосов
/ 02 июля 2019

В основной программе модуль объявляется со многими переменными следующим образом:

module my_module

integer kindi
parameter (kindi=4)

integer (kindi) my_var_from_module

end module my_module

В определенной функции используется модуль, но, похоже, единственная переменная из модуля не имеет типа:

subroutine my_function(param1, param2)

use my_module
implicit none

integer (kindi) param1, param2

print*, 'my_var_from_module = ', my_var_from_module

end function

Также я попытался объявить переменную локально с тем же именем, но она заменила ее значение.

В результате получено сообщение от компилятора:

error #6404: This name does not have a type, and must have an explicit type.

1 Ответ

0 голосов
/ 02 июля 2019

Минимальный пример сработал.

Итак, я удалил основной файл программы .o, в котором объявлен модуль, и это решило проблему ...

Окончательное объяснение: компьютер, который хранит код, и компьютер, который его компилирует / выполняет, не совпадают. Таким образом, чтобы протестировать модификации, все должно быть перенесено с компьютера на другой. Однако, паразитный my_module.mod раньше был в файловой системе разработки, и make не заменял бы его. По этой причине, если основной файл не был изменен одновременно с подпрограммой, переменная не была известна компилятору, который использовал старую версию .mod файла.

...