В настоящее время я работаю над проектом, который требует интегрирования fortran-кода в C++. В fortran-модуле объявляются множество переменных и массивов. Я могу получить доступ к целому, float и double типам из c, объявив переменную c как extern double common_area_mp_rmax_, когда соответствующее объявление fortran является реальным * 8 rmax, а имя модуля - common_area. Однако, когда я пытаюсь сделать то же самое для массива, я получаю ошибку.доступ к переменным модуля fortran из C++
предположит, что код в FORtran модуля: реальных * 8, размещаемый, размер (:,:, :) :: х
Я cretaed переменного тока двойного указателя, как:
extern "C" { double* common_area_mp_x_; }
Теперь, когда я компилирую весь проект, он говорит «множественное определение« variable_area_mp_x_ ». Я использую CMake для компиляции всего проекта. Может кто-то пролить свет, что я делаю неправильно? Я новичок в fortran, и мне становится трудно это исправить. Я ценю ваше время и помощь.
Спасибо, Mindbender
Отсутствующие 'extern'? –
Нет, на самом деле у меня есть декларация на стороне С с внешним. Я просто отредактирую и уменьшу эту путаницу .. спасибо .. – mindbender
Поскольку это только базовая переменная (а не структура, функция или класс), возможно, вы можете оставить «double * common_area_mp_x_» из заголовочных файлов, если это необходимо, а затем объявить 'extern double * common_area_mp_x_' в файле C++, где вы ссылаетесь на эту переменную. –